2013-05-14 45 views
0

我有一個驗證事件用winform的控件箱[X]跳過驗證?

private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e) 
{ 
    if (EmployeeIDtextBox.Text == "") 
    { 
     MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID"); 
    } 
} 

,並能夠跳過驗證了cancelbutton

private void cancelbutton_Click(object sender, EventArgs e) 
{ 
    AutoValidate = AutoValidate.Disable; 
    Close(); 
} 

是否有可能跳過與windowsform的控制盒[X]驗證?我試圖將CausesValidation的形式設置爲false,但它不起作用。我也嘗試與formclosing,但它不工作。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (EmployeeIDtextBox.CausesValidation) 
    { 
     EmployeeIDtextBox.CausesValidation = false; 
     Close(); 
    } 
} 
+0

在FormClosing中使用與cancelbutton_Click中相同的代碼。 – wonko79 2013-05-14 13:07:16

+0

我已經試過了,但沒有工作:( – 2013-05-14 13:13:48

回答

1

我已經在上一個問題中給出了答案。停止使用MessageBox並且問題消失。改用ErrorProvider組件。

攔截表單的關閉處理,以便您可以在第一個事件觸發前取消驗證,這需要進行攻擊。將此代碼粘貼到您的表單中:

protected override void WndProc(ref Message m) { 
     // Intercept WM_SYSCOMMAND, SC_CLOSE 
     if (m.Msg == 0x112 && (m.WParam.ToInt32() & 0xfff0) == 0xf060) this.AutoValidate = AutoValidate.Disable; 
     base.WndProc(ref m); 
    } 
+0

非常感謝:) – 2013-05-14 13:33:19