如何防止表单在构造函数中显示?

时间:2010-02-21 22:47:43

标签: c# .net compact-framework mobile

我有一个C#应用程序,我试图阻止表单显示在构造函数中。

我发布了这样的表单:

Form1 f = new Form1();
f.ShowDialog();

我在构造函数中需要做什么,因此f.ShowDialog不应该启动并继续执行代码。

4 个答案:

答案 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();