用户关闭应用程序时禁用所有表单上的验证

时间:2012-02-26 16:44:21

标签: vb.net winforms validation

当用户点击“X”图标关闭应用程序或用户点击关闭应用程序的应用程序中的按钮时,是否有一种简单的方法可以禁用所有表单验证?

我发现了这个但它在C#中。你能把它转换成VB.Net编码吗?

http://geekswithblogs.net/dapostolov/archive/2009/06/14/the-validating-event-can-prevent-a-form-closing-properly.aspx

3 个答案:

答案 0 :(得分: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 :(得分:1)

我找到了另一种实现此解决方案的方法

首先声明一个公共属性

Private bFormClosing As Boolean = False

然后在验证代码中包含此布尔值,并使用AND

. . . And bFormClosing = False then

在这里使用

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

您为所有验证控件事件执行此操作,然后在验证事件之前触发的Exit_Button的Enter事件中,设置bClosingForm = true

然后它触发级联事件并转到验证事件以执行AND bFormClosing,并且如果您拥有else将跳转到e.Cancel = false并且将禁用验证并允许您可以关闭验证事件的所有控件的形式。

请记住将退出按钮的CausesValidation = false设置为false。

此外,您可以将它放在鼠标按下或ClosingForm事件,即在验证事件之前触发的任何事件。 Hurray终于为我工作了!

答案 2 :(得分: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