ユーザーがフォームを閉じないようにするために、ac#winフォームでAlt+を無効にする最良の方法は何ですか?F4
フォームをポップアップダイアログとして使用してプログレスバーを表示していますが、ユーザーがフォームを閉じられないようにしたいと考えています。
これは仕事をします:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
編集:pix0rsの懸念に応えて-はい、あなたはプログラムでアプリを閉じることができないということは正しいです。ただし、フォームを閉じる前に、form_closingイベントのイベントハンドラーを削除するだけで済みます。
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
の値を見るとFormClosingEventArgs e.CloseReason
、フォームが閉じられている理由がわかります。その後、何をするかを決定できます。可能な値は次のとおりです。
メンバー名- 説明
なし- 閉鎖の原因が定義されていないか、特定できませんでした。
WindowsShutDown - オペレーティング システムは、シャットダウンする前にすべてのアプリケーションを閉じています。
MdiFormClosing - このマルチ ドキュメント インターフェイス (MDI) フォームの親フォームが閉じています。
UserClosing - ユーザーがユーザー インターフェイス (UI) を介してフォームを閉じています。たとえば、フォーム ウィンドウの [閉じる] ボタンをクリックするか、ウィンドウのコントロール メニューから [閉じる] を選択するか、ALT+を押しますF4。
TaskManagerClosing - Microsoft Windows タスク マネージャーがアプリケーションを閉じています。
FormOwnerClosing - 所有者フォームが閉じています。
ApplicationExitCall - 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 を使用すると、アプリを強制終了させるのではなく、アプリを正常にシャットダウンできます。経験上、誰かがあなたのアプリを強制終了するということは、構成ファイルの破損、データベースの破損、再開できない途中で終わったタスク、およびその他多くの苦痛を伴うことを意味します。
少なくとも、それを完全に防ぐのではなく、「よろしいですか」と促してください。
FormClosing イベントを購読する
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = e.CloseReason == CloseReason.UserClosing;
}
メソッド本体に 1 行のみ。
プログラムでウィンドウを閉じている場合でも FormClosing が呼び出されますか? その場合は、(操作を常にキャンセルするのではなく) 終了時にフォームを閉じることができるように、何らかのコードを追加することをお勧めします。
フォームのコンストラクターで次を使用して、フォームの閉じるボタンを非表示にします。
this.ControlBox = false;