2010-08-10 88 views
4

我在與Windows窗體以下情況下問題:停止執行 - 的WinForms

我創建了兩個按鈕形式,每個按鍵都被分配與行爲的DialogResult確定和的DialogResult分別取消。 但基於一定的條件,我需要停止OK按鈕的執行,問題是,如果我只是犯了這樣的回覆:

private void btnOk_Click(object sender, EventArgs e) 
    { 
     foreach(Control control in tblTable.Controls) 
     { 
      if (control.GetType() == typeof(TextBox)) 
      { 
       if (control.Text.Trim() == "") 
       { 
        control.Focus(); return; 
       } 
      } 
      else 
      { 

      } 
     } 
    } 

對話結果保持確定的答案返回給父窗體,我需要停止執行該事件,並且在用戶更正表單上的信息之前不要返回任何答案。

感謝您的幫助。

回答

3

個人而言,我不會上的按鈕在這種情況下使用DialogResult秒。當只有不需要任何附加邏輯的獨特選項(即製作自定義MessageBox)時,我傾向於設置DialogResult

我會做的是剛剛自己發送DialogResult成功:

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

我同意你的看法,這是更清潔的解決方案。感謝您的回答。 – lidermin 2010-08-10 16:56:59

+4

我不知道。 Windows用戶界面設計要求當用戶按下Enter鍵並且默認按鈕(OK)被標記時,對話框關閉。解決方法很簡單,只需將DialogResult設置爲None即可。 – 2010-08-15 20:22:22

5

漢斯·帕桑特在評論中提到,只需設置的DialogResult爲無!
喜歡我:

private void btnOk_Click(object sender, EventArgs e) 
{ 
    if(ValidationFailed()) 
    { 
     this.DialogResult = DialogResult.None; 
     return; 
    } 
    //... 
} 
+0

在下一次點擊時,它將始終爲無 – CRice 2013-04-09 04:00:59

+2

@Cice:不會。在下一次單擊時,由於按鈕的DialogResult屬性設置爲OK,窗體的DialogResult將再次被按鈕設置爲OK。 (也許你認爲我的意思是將DialogProperty設置爲無按鈕?) – 2013-04-09 08:03:17

+1

好吧。 – CRice 2013-04-17 07:18:43