我打开一个模式对话框,要求用户填写某些字段。保留在ShowDialog结果后打开的对话框
if(dlgUserDetail.ShowDialog() == DialogResult.OK)
{
}
单击确定后,控件进入父窗体,我正在验证用户输入。
如果验证失败,我想保持对话框打开旧值。由于它是模态对话框,表单会被关闭。
这似乎是一个常见的问题,因为我在网上看到很多讨论,但是无处找到解决办法。
请让我知道如何解决这个问题。谢谢。
问候 ArunDhaJ
我打开一个模式对话框,要求用户填写某些字段。保留在ShowDialog结果后打开的对话框
if(dlgUserDetail.ShowDialog() == DialogResult.OK)
{
}
单击确定后,控件进入父窗体,我正在验证用户输入。
如果验证失败,我想保持对话框打开旧值。由于它是模态对话框,表单会被关闭。
这似乎是一个常见的问题,因为我在网上看到很多讨论,但是无处找到解决办法。
请让我知道如何解决这个问题。谢谢。
问候 ArunDhaJ
如果这是你的对话框,你可以添加一个CancelEventArgs
事件称为Validate
或InputOk
(类似打开文件对话框FileOk
),有你的主要形式检查输入的方法。在对话框中调用DialogResult = DialogResult.OK
之前,您需要添加一个'onValidate`调用来检查输入是否有效。
{
// dialog
{
if (onValidate()) {
DialogResult = DialogResult.OK;
}
}
private bool onValidate() {
CancelEventHandler handler = Validate;
if (handler == null) {
return true;
}
CancelEventArgs args = new CancelEventArgs();
handler(this, args);
return args.Cancel;
}
}
{
// form
{
dlgUserDetail.Validate += valid;
if(dlgUserDetail.ShowDialog() == DialogResult.OK) { }
}
private void valid(object sender, CancelEventArgs e) {
// check input and set
e.Cancel = true;
// if not valid
}
}
一种解决方案是把验证逻辑成dlgUserDetail形式并调用它OnClosing事件。如果验证失败,则阻止表单关闭。
这工作就像一个魅力。非常感谢您的建议。 :) – ArunDhaJ 2010-09-20 12:10:48
@ArunDhaJ:np。只记得一次只订阅这个事件,或者你会多次验证这个代码,这是一个性能杀手。 :-) – Patrick 2010-09-20 12:14:36
是的,对。我也会添加取消订阅。 – ArunDhaJ 2010-09-20 13:17:33