我打開一個模式對話框,要求用戶填寫某些字段。保留在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