我有一個C#應用程序,我試圖阻止窗體顯示在構造函數中。如何防止窗體出現在構造函數中?
我啓動的形式是這樣的:
Form1 f = new Form1();
f.ShowDialog();
我有什麼在構造這樣做f.ShowDialog不應該啓動並繼續執行代碼。
我有一個C#應用程序,我試圖阻止窗體顯示在構造函數中。如何防止窗體出現在構造函數中?
我啓動的形式是這樣的:
Form1 f = new Form1();
f.ShowDialog();
我有什麼在構造這樣做f.ShowDialog不應該啓動並繼續執行代碼。
不能添加在構造函數(在這個例子中ShowTheDialog
)公共屬性f
,並設置爲true
如果你想叫f.ShowDialog
Form1 f = new Form1();
if(f.ShowTheDialog) {
f.ShowDialog();
}
(我沒有窗戶形式的專家,但)無法您在構造函數中設置一個標誌,是否可以顯示或不顯示的形式,然後覆蓋在onload()方法,如果你的標誌是假的,馬上躲形式,例如:
private bool _canShow = true;
public Form1()
{
_canShow = ...;
}
protected override OnLoad(EventArgs e)
{
if (!_canShow) Close();
base.OnLoad(e);
}
我認爲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();
}
}
這樣的事情可能會奏效,但我認爲這是一種代碼味道。名爲'ShowDialog'的方法應該顯示一個對話框,而不是簡單地不做任何事情,特別是如果這是整個框架期望的行爲。 – 2010-02-21 23:09:41
同意。我只是提供了他想要的確切解決方案,儘管它可能處理得最好。 – Dave 2010-02-21 23:11:06
是的,我認爲原來的問題聽起來有點像代碼味道(我們知道的信息很少)。 – 2010-02-21 23:12:45
如何在構造函數本身是否需要調用的ShowDialog上顯示?
然後你只需要做:
Form1 f = new Form1();
如何不調用'f.ShowDialog()'?或者,你可以在構造函數中拋出異常。 – 2010-02-21 22:49:40
否則不可能?如果我允許顯示,我只能在構造函數中決定。 – Pentium10 2010-02-21 22:50:52