分配 DialogResult 属性是关闭对话框的原因。它在设置时保持运行 None 。你不需要 Close() 呼叫。调用的代码 ShowDialog() 得到了 DialogResult 您指定为返回值的值。因此它知道对话框是否已关闭,或者是否已取消。
DialogResult
None
Close()
ShowDialog()
另请注意,您编写验证事件处理程序的方式,您不需要 ValidateChildren() 。你设定 e.Cancel = true 防止用户离开文本框。这意味着当文本框被验证为正常时,她只能进入“确定”按钮。但是,您必须确保在显示对话框时首先选择具有验证的控件。
ValidateChildren()
e.Cancel = true
一个友好的对话框是用户可以在控件之间自由选项并选择“简单”的对话框。您现在需要两个验证,一个验证输入的值是否有效,另一个验证是否没有丢失值。您可以通过在Validation事件处理程序中接受空字符串来获得此结果。但Winforms不能很好地支持后者,你需要代码。
我知道这有些晚了,但我会再向Hans回答一下。创建文本框事件验证并将m_ErrorProvider.Clear()移动到Validated事件。验证完成时(e.cancel == false),将触发验证的事件。所以你会有这样的事情:
void TextBox_Validating( object sender, CancelEventArgs e ) { TextBox textBox = sender as TextBox; bool valid = textBox.TabIndex == 1 || textBox.Text.Length > 0; if( !valid ) m_ErrorProvider.SetError( textBox, "Error " + textBox.Name ); e.Cancel = !valid; } private void TextBox_Validated(object sender, System.EventArgs e) { TextBox textBox = sender as TextBox; m_ErrorProvider.SetError(textBox, ""); }