2014-06-08 193 views
0

我想檢查一下winform所做的動作是否成功。Winform返回結果

MainForm form = new MainForm(); 
form.Show(); 
//continue in case the form returns true 

如何返回並檢查winform關閉後的值?

回答

0

你必須使用該DialogResult

MainForm form = new MainForm(); 
DialogResult result = form.ShowDialog(); 

if (result == DialogResult.OK) 
{ 
} 
else 
{ 
} 

你必須使用一個按鈕Click事件處理程序設置窗體的DialogResult,例如:

private void Button1_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.OK; 
} 
+0

謝謝。我應該怎麼做才能將對話框結果設置爲OK? – user3165438

+0

謝謝。爲什麼我不能使用'form.Show'方法? – user3165438

+0

因爲'Show'不會等待'Form'的結果。它繼續在兩個分支執行。因此,你沒有結果。 –

1

的調用form.Show()立即返回。在通話返回之前,用戶將沒有機會做任何事情。如果您想等到用戶按下「確定」或「取消」等按鈕,則需要撥打form.ShowDialog(),以阻止執行代碼的其餘部分,直到窗體關閉。

using(MainForm form = new MainForm()) 
{ 
     DialogResult dr = form.ShowDialog(); 
     if(dr == DialogResult.OK) 
     { 
     // User presses OK button, 
     // read the public property UserName and 
     // appply your logic here. 
     string userName = form.UserName; 

     } 
     else if(dr == DialogResult.Cancel) 
     { 
     // User presses Cancel button 
     MessageBox.Show("Login aborted"); 
     } 
} 

此代碼還需要MainForm類按鈕上的一些屬性設置。 OK按鈕的屬性DialogResult設置爲enum DialogResult.OK,而Cancel按鈕的屬性設置爲DialogResult.Cancel

這樣,當用戶按下OK/Cancel按鈕時,您的MainForm將被隱藏(仍未關閉和/或處置),並且您可以從using塊訪問MainForm實例的公共屬性。

例如,假設OK按鈕事件處理程序包含您的用戶名

private void cmdOK_Click(object sender, EventArgs e) 
{ 
    if(.....some kind of authentication method....) 
    { 
     this.UserName = "Steve"; 
     .... 
    } 
} 

的登錄驗證和MainForm類,一個公共屬性名爲username現在

public string UserName {get; private set} 

,如圖上面的例子中,您可以檢索使用塊內的UserName屬性

請注意,圍繞調用創建t他的形式實例將確保在關閉大括號處正確處理表單。