Top > プログラミング > .NET Tips> フォームの「閉じる」ボタンを無効にする

フォームの「閉じる」ボタンを無効にする」への評価、コメント

評価

良い / 悪い = 39 / 4 (「良い」の割合 = 0.907 , 人気度 = 1.482

評価する

コメント一覧


通常のコメント
管理人 2015/06/22 (Mon) 01:19:21
> メニューのプロシージャでMe.Closeした場合には、m.Msg=70 となり、終了を検出できないようです

ここで紹介しているのはフォームの閉じるボタンを無効にする方法で、Closeメソッドが呼び出されても閉じないようにする方法ではありません。フォームが閉じられた原因を知る方法は、以下のページで説明しています。

http://dobon.net/vb/dotnet/form/unloadmode.html

> FormClosingイベントで e.Cancel = True としたら、終了はしないのですが、タスクトレイのアイコンが消えてしまいました。

私が試した限りでは、消えませんでした。

通常のコメント
Kino 2015/04/30 (Thu) 20:24:17
タスクトレイに常住するプログラムで、ContextMenuStripによるメニューから終了する仕組みにしています。
そのメニューのプロシージャでMe.Closeした場合には、m.Msg=70 となり、終了を検出できないようです(Win7 x64 VB2010 対象フレームワーク:.NetFramewok4)

終了するかどうかの確認をするのが目的です。

FormClosingイベントで e.Cancel = True としたら、終了はしないのですが、タスクトレイのアイコンが消えてしまいました。

何か対策はありますでしょうか。

評価の理由
いいね 2012/09/5 (Wed) 22:32:15
評価:良い
ずっと探していたものがこんなところにあったとは…
やった~

通常のコメント
管理人 2012/04/9 (Mon) 21:56:11
> 『 m.WParam.ToInt32() = SC_CLOSE 』だと64ビット環境で System.OverflowException を起こしてしまいますね。

0xFFF0とAndして比較すべきでした。修正しておきます。ご報告ありがとうございました。

通常のコメント
翡翠 紫 2012/01/26 (Thu) 01:30:54
> 閉じられる原因を調べて判断する方法
こちらの
> 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

基本IntPtrをIntegerに合わせるのではなく、
IntegerをIntPtrにして比較する方針が得策かと。
なるべくIntPtrに合わせる方向で。

通常のコメント
匿名希望 2012/01/16 (Mon) 10:22:29
困っていたので大変助かりました。
どうもありがとうございました。

評価の理由
LukeShort 2009/04/8 (Wed) 21:43:17
評価:良い
業務で役立つ情報なので助かりました。

通常のコメント
おっか 2009/03/15 (Sun) 03:48:13
別件ですが、解決しました。

コメントの投稿

[説明]