質問
無効にする最善の方法は何ですか オルタナティブ + F4 C# Winフォームでユーザーがフォームを閉じないようにするには?
進行状況バーを表示するポップアップ ダイアログとしてフォームを使用していますが、ユーザーがそれを閉じられないようにしたくありません。
解決
これは次のような仕事をします。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
編集:pix0rs の懸念に応えて - はい、プログラムでアプリを閉じることはできないというご意見は正しいです。ただし、フォームを閉じる前に、form_closed イベントのイベント ハンドラーを単に削除することもできます。
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
他のヒント
見てみると、 価値 の FormClosingEventArgs e.CloseReason
, フォームが閉じられた理由が表示されます。その後、何をするかを決定できます。可能な値は次のとおりです。
メンバー名 - 説明
なし - 閉鎖の原因が定義されていないか、特定できませんでした。
Windowsシャットダウン - オペレーティング システムは、シャットダウンする前にすべてのアプリケーションを閉じます。
MdiFormクロージング - このマルチ ドキュメント インターフェイス (MDI) フォームの親フォームが閉じられます。
ユーザー終了 - ユーザーがユーザー インターフェイス (UI) を通じてフォームを閉じている。たとえば、フォーム ウィンドウの [閉じる] ボタンをクリックするか、ウィンドウのコントロール メニューから [閉じる] を選択するか、または を押します。 オルタナティブ+F4.
タスクマネージャー終了 - Microsoft Windows タスク マネージャーがアプリケーションを閉じています。
フォーム所有者終了 - オーナーフォームは終了します。
アプリケーション終了コール - Application クラスの Exit メソッドが呼び出されました。
これが正しい方法だと思います。
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
e.Cancel = true;
break;
}
base.OnFormClosing(e);
}
アプリケーション自体が終了しないようにするのは、アプリケーションにとって悪い形式であると考えられることに注意してください。Closing イベントのイベント引数を確認して、アプリケーションを閉じるように求められた方法と理由を判断する必要があります。Windows のシャットダウンが原因の場合は、終了を妨げないでください。
あなたはそれを扱うことができます FormClosing
イベントとセット FormClosingEventArgs.Cancel
に true
.
進行状況バーを表示するポップアップ ダイアログとしてフォームを使用していますが、ユーザーがそれを閉じられないようにしたくありません。
ユーザーがアプリを閉じると決めていて、alt+f4 を押すのに十分な知識を持っている場合は、代わりにタスク マネージャーを実行してアプリケーションを強制終了するのに十分な知識も持っている可能性が高くなります。
少なくとも alt+f4 を使用すると、アプリをただ強制的に終了させるのではなく、正常にシャットダウンできます。経験上、誰かがアプリを強制終了するということは、構成ファイルの破損、データベースの破損、再開できない中途半端なタスク、その他多くの痛ましい事態を意味します。
きっぱりと阻止するのではなく、少なくとも「よろしいですか」と促すようにしましょう。
これは無効にするハックです オルタナティブ + F4.
private void test_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4)
{
e.Cancel = true;
}
}
これは次のような仕事をします。
bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
myButtonWasClicked = true;
Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myButtonWasClicked)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
プログラムでウィンドウを閉じているときでも FormClosing が呼び出されますか?その場合は、(常に操作をキャンセルするのではなく) フォームを終了したときにフォームを閉じることができるようにコードを追加することをお勧めします。
購読フォーム終了イベント
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = e.CloseReason == CloseReason.UserClosing;
}
メソッド本体には 1 行のみ。
フォームのコンストラクターで次を使用して、フォーム上の閉じるボタンを非表示にします。
this.ControlBox = false;