10

下の画像のようなフォームの閉じるボタンを無効にするにはどうすればよいですか?(下の画像はウィンドウを示していMessageBoxます)

ここに画像の説明を入力してください

上記MessageBoxは私が作成したものです!通常のフォームの閉じるボタンを無効にしたい。

4

5 に答える 5

19

問題のウィンドウを右クリックし、[プロパティ]をクリックします。[プロパティ]で[イベント]をクリックします。イベントをダブルクリックします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

于 2013-03-07T13:13:39.397 に答える
13

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ボタンが不要な場合は設定できますが、それは質問の内容ではありません。

于 2013-04-10T22:16:00.583 に答える
10

フォームのClosingイベント(Closedイベントではなく)を処理します。

次に、e.CloseReasonを使用して、本当にブロックするか(UserClose)、ブロックしないか(TaskManager Close)を決定します。

また、codeprojectのフォームで閉じるボタンを無効にする小さな例があります。

于 2012-09-14T10:25:25.307 に答える
5

CreateParamsから派生した関数をオーバーライドする必要がありますSystem.Windows.Forms.Form

そして、クラススタイルを変更します

myCp.ClassStyle = 0x200;
于 2012-09-14T10:28:50.953 に答える
2
 Closing += (s, eventArgs) =>
        {
            DialogResult = DialogResult.None; //means that dialog would continue running
        };
于 2016-05-16T03:07:01.397 に答える