minimumMaximizeCloseボタンが無効になっているWinFormがありますが、それでも誰かがタスクバーでそれを押すと最小化されます。これを防ぎたい。
どうすればこれを達成できますか?
フォームのWndProcを上書きし、メッセージを最小限に抑えてキャンセルします。
次のコードをフォームに追加します。
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xf020;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if (m.WParam.ToInt32() == SC_MINIMIZE)
{
m.Result = IntPtr.Zero;
return;
}
}
base.WndProc(ref m);
}
このSOスレッドにあるRobのコードを変更しました:
C#で最小化ボタンを無効にする方法は?
うまく機能します。ちらつきがなく、ユーザーが最小化しようとしても何も起こりません。
SizeChangedイベントで変更しているのを見つけて、 WindowStateを確認し、 Minimizedに設定されている場合は、Normalに戻すことができます。最も洗練されたソリューションではありませんが、機能するはずです。
例えば。
private void myForm_SizeChanged(object sender, System.EventArgs e)
{
if (myForm.WindowState == FormWindowState.Minimized)
{
myForm.WindowState = FormWindowState.Normal;
}
}
自分に適している場合は、タスクバーから非表示にします。ShowInTaskbar=false
ウィンドウから最小化ボタンを削除するだけです。
以下のコードをFormクラスのprivatevoidInitializeComponent()メソッドに追加します。
this.MinimizeBox = false;