2010-02-21 50 views
1

我有一个C#应用程序,我试图阻止窗体显示在构造函数中。如何防止窗体出现在构造函数中?

我启动的形式是这样的:

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

我有什么在构造这样做f.ShowDialog不应该启动并继续执行代码。

+7

如何不调用'f.ShowDialog()'?或者,你可以在构造函数中抛出异常。 – 2010-02-21 22:49:40

+0

否则不可能?如果我允许显示,我只能在构造函数中决定。 – Pentium10 2010-02-21 22:50:52

回答

1

不能添加在构造函数(在这个例子中ShowTheDialog)公共属性f,并设置为true如果你想叫f.ShowDialog

Form1 f = new Form1(); 
if(f.ShowTheDialog) { 
    f.ShowDialog(); 
} 
0

(我没有窗户形式的专家,但)无法您在构造函数中设置一个标志,是否可以显示或不显示的形式,然后覆盖在onload()方法,如果你的标志是假的,马上躲形式,例如:

private bool _canShow = true; 
public Form1() 
{ 
    _canShow = ...; 
} 

protected override OnLoad(EventArgs e) 
{ 
    if (!_canShow) Close(); 
    base.OnLoad(e); 
} 
0

我认为Pentium10想成为abl e通过构造函数指定ShowDialog在以后是否允许实际显示对话框。换句话说,他确实希望能够重写ShowDialog,这样在他自己的ShowDialog中,他可以检查这个魔法权限变量并保存或调用基本ShowDialog。

我不确定这是否在技术上是正确的,但它似乎工作。 Pentium10在你的Window类中创建了另一个名为ShowDialog的公共方法,它隐藏了继承的ShowDialog。然后里面,检查您的变量,只有当它是允许的,调用基的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(); 
    } 
} 
+1

这样的事情可能会奏效,但我认为这是一种代码味道。名为'ShowDialog'的方法应该显示一个对话框,而不是简单地不做任何事情,特别是如果这是整个框架期望的行为。 – 2010-02-21 23:09:41

+0

同意。我只是提供了他想要的确切解决方案,尽管它可能处理得最好。 – Dave 2010-02-21 23:11:06

+0

是的,我认为原来的问题听起来有点像代码味道(我们知道的信息很少)。 – 2010-02-21 23:12:45

0

如何在构造函数本身是否需要调用的ShowDialog上显示?

然后你只需要做:

Form1 f = new Form1(); 
相关问题