2010-09-20 64 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事件。如果驗證失敗,則阻止表單關閉。