2012-07-25 17 views
0

我創建了兩種表單:登錄表單和開始調試時顯示的主表單。 當加載主窗體的登錄窗體也加載。 現在我的問題是,我想在加載登錄表單時禁用主表單。 如果連接成功,則必須啓用主窗體,否則應禁用它。如何從其他表單啓用表單

我試過這段代碼:

MainFrm的.cs:

private void Form1_Load(object sender, EventArgs e) 
{ 
foreach (Control c in this.Controls) 
c.Enabled = false; 
Connectez ConnectezFrm = new Connectez { TopMost = true, Owner = this }; 
ConnectezFrm.Show(); 
} 

Connectez.cs:

private MainFrm objMainfrm { get; set; } 
public Connectez(MainFrm objfrm) 
{ 
objMainfrm = objfrm; 
InitializeComponent(); 
} 
.... 
.... 
private void simpleButton1_Click(object sender, EventArgs e) 
{ 
foreach (Control c in objMainfrm.Controls) 
c.Enabled = true; 
this.Close(); 
} 
+1

你所描述的是*模態*形式。 – 2012-07-25 18:21:31

回答

2

您不需要禁用表單上的單個控件即可禁用該表單。你可以使用

objMainForm.Enabled = false; 

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enabled

但是,你真的想在你的情況做的是隻顯示一個模式對話框。使用

ConnectezFrm.ShowDialog(); 

模態對話框阻止與其父母處於活動狀態時的交互。

而且它看起來像你試圖通過傳遞引用主窗體的子窗體來實現這一目標:

public Connectez(MainFrm objfrm) 

這是沒有必要讓一個模式對話框的效果。

如果您在連接失敗時需要採取一些措施,您可以從Connectez返回DialogResult。檢查DialogResult是這樣的:

DialogResult dr = ConnectezFrm.ShowDialog(); 
if (dr != DialogResult.OK) { 
    // Do something e.g. disable certain parts of the form 
    // Be sure to leave a button or something enabled to load ConnectezFrm again :-) 
} 
3

使用ShowDialog(this)而不是Show()

+0

+1擊敗了我 – Habib 2012-07-25 18:22:10

相關問題