2008年12月5日金曜日

.NET フォームを閉じるときにValidatingイベントを走らせないようにするには

Validatingイベントは
フォームの×ボタンをクリックしフォームを閉じようとしたり、
CausesValidatin=Falseを設定しているコんトロールであっても、
そのコントロールの処理内でMe.Closeを記載していたりすると、
Validatingイベントが走ってしまいます。

フォームを閉じるときにValidatingイベントを走らせないようにするには
Public Class Form1
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Const WM_CLOSE As Integer = &H10
Const WM_SYSCOMMAND As Integer = &H112
Const SC_CLOSE As Integer = &HF060

Select Case m.Msg
Case WM_SYSCOMMAND
If m.WParam.ToInt32() = SC_CLOSE Then
'Xボタン、コントロールメニューの「閉じる」、
'コントロールボックスのダブルクリック、
'Atl+F4などにより閉じられようとしている
'このときValidatingイベントを発生させない。
Me.AutoValidate = Windows.Forms.AutoValidate.Disable

End If
Case WM_CLOSE
'Application.Exit以外で閉じられようとしている
'このときValidatingイベントを発生させない。
Me.AutoValidate = Windows.Forms.AutoValidate.Disable
End Select

MyBase.WndProc(m)
End Sub
End Class

0 件のコメント: