> 閉じられる原因を調べて判断する方法 こちらの > Const SC_CLOSE As Integer = &HF060 > If m.Msg = WM_SYSCOMMAND And m.WParam.ToInt32() = SC_CLOSE Then ですが、これ『 m.WParam.ToInt32() = SC_CLOSE 』だと 64ビット環境で System.OverflowException を起こしてしまいますね。 こちらの環境だとウィンドウ上部を右クリックした時に発生しました。
なので、以下のように修正すると良いかと。
<System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _ Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Const WM_SYSCOMMAND As Integer = &H112 Dim SC_CLOSE As IntPtr = New IntPtr(&HF060) '修正箇所1 If m.Msg = WM_SYSCOMMAND And m.WParam = SC_CLOSE Then '修正箇所2 Return End If MyBase.WndProc(m) End Sub
管理人 2015/06/22 (Mon) 01:19:21
ここで紹介しているのはフォームの閉じるボタンを無効にする方法で、Closeメソッドが呼び出されても閉じないようにする方法ではありません。フォームが閉じられた原因を知る方法は、以下のページで説明しています。
http://dobon.net/vb/dotnet/form/unloadmode.html
> FormClosingイベントで e.Cancel = True としたら、終了はしないのですが、タスクトレイのアイコンが消えてしまいました。
私が試した限りでは、消えませんでした。