我有一个C#应用程序,我试图阻止表单显示在构造函数中。
我发布了这样的表单:
Form1 f = new Form1();
f.ShowDialog();
我在构造函数中需要做什么,因此f.ShowDialog不应该启动并继续执行代码。
答案 0 :(得分:1)
您无法在ShowTheDialog
的构造函数中添加公共属性(在此示例中为f
),如果要调用true
,则设置为f.ShowDialog
Form1 f = new Form1();
if(f.ShowTheDialog) {
f.ShowDialog();
}
答案 1 :(得分:0)
(我不是Windows窗体专家,但是)你不能在你的构造函数中设置一个标志,是否可以显示表单,然后覆盖OnLoad()方法,如果你的标志是false,隐藏表格立即,例如:
private bool _canShow = true;
public Form1()
{
_canShow = ...;
}
protected override OnLoad(EventArgs e)
{
if (!_canShow) Close();
base.OnLoad(e);
}
答案 2 :(得分:0)
我认为Pentium10希望能够通过构造函数指定稍后ShowDialog是否允许实际显示对话框。换句话说,他真的希望能够覆盖ShowDialog,这样在他自己的ShowDialog中他可以检查这个魔术权限变量并保释,或者调用基础ShowDialog。
我不确定这在技术上是否正确,但似乎确实有效。在您的Window类中,Pentium10创建另一个名为ShowDialog的公共方法,该方法隐藏了继承的ShowDialog。然后在里面检查你的变量,只有在允许的情况下,调用base的ShowDialog方法,如下所示:
public partial class Window3 : Window
{
bool _allowed { get; set; }
public Window3( bool allowed)
{
_allowed = allowed;
InitializeComponent();
}
public void ShowDialog()
{
if( !_allowed)
return;
else
base.ShowDialog();
}
}
答案 3 :(得分:0)
如果需要显示在构造函数本身中调用ShowDialog怎么样?
然后你只需要这样做:
Form1 f = new Form1();