下の画像のようなフォームの閉じるボタンを無効にするにはどうすればよいですか?(下の画像はウィンドウを示していMessageBox
ます)
上記MessageBox
は私が作成したものです!通常のフォームの閉じるボタンを無効にしたい。
問題のウィンドウを右クリックし、[プロパティ]をクリックします。[プロパティ]で[イベント]をクリックします。イベントをダブルクリックしますFormClosing
。
次のコードは、Windowsフォームデザイナによって生成されます。
private void myWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
コードを次のように更新するだけです(追加e.Cancel = true;
):
private void myWindow_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
完了です。
または、ウィンドウの閉じるボタン、最大化ボタン、最小化ボタンを無効にする場合は、次のようにします。
問題のウィンドウを右クリックして、[プロパティ]をクリックします。ControlBox
[プロパティ]で、プロパティをに設定しますfalse
。
MDI子ウィンドウを使用していて、ウィンドウの作成中に閉じるボタンを無効にすることが除外されている場合(つまり、フォームの存続期間中の特定の時間に無効にしたい場合)、以前に提案されたソリューションはいずれも機能しません¹。
代わりに、次のコードを使用する必要があります。
[DllImport("user32")]
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32")]
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable);
public static void DisableCloseButton(this Form form)
{
// The 1 parameter means to gray out. 0xF060 is SC_CLOSE.
EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1);
}
public static void EnableCloseButton(this Form form)
{
// The zero parameter means to enable. 0xF060 is SC_CLOSE.
EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0);
}
¹ControlBox = false
ボタンが不要な場合は設定できますが、それは質問の内容ではありません。
フォームのClosingイベント(Closedイベントではなく)を処理します。
次に、e.CloseReasonを使用して、本当にブロックするか(UserClose)、ブロックしないか(TaskManager Close)を決定します。
また、codeprojectのフォームで閉じるボタンを無効にする小さな例があります。
CreateParams
から派生した関数をオーバーライドする必要がありますSystem.Windows.Forms.Form
そして、クラススタイルを変更します
myCp.ClassStyle = 0x200;
Closing += (s, eventArgs) =>
{
DialogResult = DialogResult.None; //means that dialog would continue running
};