2010-02-21 47 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(); 
相關問題