2010-09-20 36 views
0

我打开一个模式对话框,要求用户填写某些字段。保留在ShowDialog结果后打开的对话框

if(dlgUserDetail.ShowDialog() == DialogResult.OK) 
{ 

} 

单击确定后,控件进入父窗体,我正在验证用户输入。

如果验证失败,我想保持对话框打开旧值。由于它是模态对话框,表单会被关闭。

这似乎是一个常见的问题,因为我在网上看到很多讨论,但是无处找到解决办法。

请让我知道如何解决这个问题。谢谢。

问候 ArunDhaJ

回答

1

如果这是你的对话框,你可以添加一个CancelEventArgs事件称为ValidateInputOk(类似打开文件对话框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 
    } 
} 
+0

这工作就像一个魅力。非常感谢您的建议。 :) – ArunDhaJ 2010-09-20 12:10:48

+0

@ArunDhaJ:np。只记得一次只订阅这个事件,或者你会多次验证这个代码,这是一个性能杀手。 :-) – Patrick 2010-09-20 12:14:36

+0

是的,对。我也会添加取消订阅。 – ArunDhaJ 2010-09-20 13:17:33

1

一种解决方案是把验证逻辑成dlgUserDetail形式并调用它OnClosing事件。如果验证失败,则阻止表单关闭。