2012-02-26 74 views

回答

5

找到了!

我把這個代碼在按鈕單擊處理程序:

' Disable validation on the form. 
'-------------------------------- 
Me.AutoValidate = System.Windows.Forms.AutoValidate.Disable 

當我再次致電形式我用這個表單對象調用objFormParents:

' Reset validation on this form because the user may have closed it before. 
'-------------------------------------------------------------------------- 
objFormParents.CausesValidation = True 

我發現這個在互聯網上處理單擊「X」圖標:

' This will allow the user to close the form without the worry of controls doing validation from "X". 
'---------------------------------------------------------------------------------------------------- 
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 

    Select Case ((m.WParam.ToInt64() And &HFFFF) And &HFFF0) 

     Case &HF060 ' The user chose to close the form. 
      Me.AutoValidate = System.Windows.Forms.AutoValidate.Disable 
    End Select 

    MyBase.WndProc(m) 
End Sub 
1

我發現了另一種實現此方法的方法olution

首先聲明一個公共屬性

Private bFormClosing As Boolean = False 

那麼你有這個布爾在您的驗證碼與和類似

. . . And bFormClosing = False then 

這裏使用

ErrorProvider.SetError("My Error Message") 
    e.Cancel = True 
Else 
    e.Cancel = False 

你做這個技巧用於所有驗證控制事件,然後在的輸入事件中的驗證事件之前觸發,可以設置bClosingForm = true

然後觸發級聯事件,並轉到確認事件進行AND bFormClosing,並會跳轉到else是你有e.Cancel = false並將停用驗證和允許您關閉所有控件驗證事件的表單。

記得設置爲false CausesValidation =退出按鈕爲false。

你也可以將它放在鼠標下,甚至是ClosingForm事件,在驗證事件之前觸發的任何事件。好極了,它爲我工作,最後!

1

你可以做得更簡單。

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    If m.WParam.ToInt32 = &HF060 Then Me.AutoValidate = System.Windows.Forms.AutoValidate.Disable 
    MyBase.WndProc(m) 
End Sub 
+0

感謝您的回答。 – 2014-05-24 15:24:24

相關問題