exM*_*ode 23 c# validation acceptbutton winforms
嗨我有一个包含几个文本框和两个按钮取消和确定的表单.这些按钮被指定为接受和取消表单中的按钮属性.问题是我必须验证在所有文本框中输入的文本.
如果用户单击"确定"按钮(即acceptButton),我想这样做.所以我编写了一个可以进行验证的函数,如果用户单击"确定"按钮,我将触发此函数.问题是即使验证函数返回false,我也无法阻止表单关闭.这是因为我将acceptbutto属性分配给了我的Ok按钮.如果验证失败而没有删除acceptbutton属性,有没有办法防止表单关闭?
Ale*_*lex 32
这是我们使用的工作解决方案(并且它有点从其他答案编译).
你只需要设置的DialogResult
,以None
防止形成与关闭.
//form init, auto-generated code (this is the case described)
private void InitializeComponent()
{
//....
this.AcceptButton = btnOk;
this.btnOk.DialogResult = DialogResult.OK;
//....
}
//event handlers
private void btnOK_Click(object sender, EventArgs e)
{
if (!Validate())
this.DialogResult = DialogResult.None;
}
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.DialogResult == DialogResult.None)
e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)
一种方法是在OnFormClosing事件中应用验证,并根据验证结果取消操作.
- 编辑 -
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.DialogResult == DialogResult.OK)
{
if (!IsValid())
{
Info("Invalid data");
e.Cancel = true;
}
else
{
Info("Valid data found, closing dialog");
}
}
else if (this.DialogResult == DialogResult.Cancel)
{
Info("Just cancelling!");
}
}
Run Code Online (Sandbox Code Playgroud)
你可以打电话this.Close();
给取消/确定事件.
或者,在OK按钮实现中,您可以更改DialogResult
按钮并将其设置为None
;
acceptButton.DialogResult = DialogResult.None;
Run Code Online (Sandbox Code Playgroud)
不要AcceptButton
在表单中设置该属性并DialogResult
从按钮中删除该属性(将其设置DialogResult.None
为)。
您可以在验证代码中设置表单的 DialogResult 属性。
if (allFieldsValidated) {
DialogResult = DialogResult.OK;
}
Run Code Online (Sandbox Code Playgroud)