2010-08-10 45 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