問題タブ [formclosing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - アプリケーションクローズのベストプラクティスを遅らせる?
ユーザーがWinFormsプログラムを終了することを選択した後に何かをするというタスクを処理するより良い方法はありますか?
[編集 1 : 'NoBugz によるコメントへの応答]この場合、 Form には ControlBox がなく、ユーザーが Form を閉じることを選択したときに何が起こるかについて、1 レベルの間接化を設定する理由があります [/編集 1]
[編集 2: 1 月 20 日 GMT +7 18:35 の時点でのすべてのコメントへの応答]おそらく MainForm のフェードアウトを使用することは、アプリケーションが閉じられているときに何をしたいかの簡単な例です: ユーザーはそれと対話できません:アプリケーションを終了するというユーザーの決定に関連していることは自明です。[/編集 2]
(なんらかの形式のスレッドを使用しますか?) (マルチスレッド アプリへの影響は?) (このコードは「臭い」ですか?)
概要: 非常に標準的な WinForms アプリケーション (標準的な方法で Program.cs で起動された 1 つの MainForm): MainForm の FormClosing イベント ハンドラー:
すぐに終了します (デフォルトの動作をトリガーします: MainForm を閉じてアプリケーションを終了します) 次の場合:
を。CloseReason はその他の CloseReason.ApplicationExitCall です
b. 特別なブール変数が true に設定されている場合、または
すぐに終了しない場合: FormClosing への「最初の呼び出し」をキャンセルします。
次に、ユーザーは MessageBox.Show ダイアログを介して、アプリケーションを終了するか、キャンセルするかを選択します。
を。もちろん、ユーザーがキャンセルした場合、アプリケーションは「そのまま」残ります。
b. ユーザーが「終了」を選択した場合:
特別なブール値のフラグ変数を true に設定します
いくつかの特別なことをするタイマーを実行します。
Timer コードの内部テストで「特別な処理」が行われたことが検出されると、Application.Exit が呼び出されます。
vb.net - VB.NET: FormClosing() を中止する
アプリを閉じるときに実行したいコード スニペットがあります。ということで、イベントを利用しFormCLosing
ました。しかし、今は終了するための確認メッセージを配置したいと思います。同様に、ユーザーが Exit( X
) ボタンをクリックすると、プロンプトが表示されます。ユーザーが [いいえ] をクリックすると、アプリは閉じず、前の状態に戻りません。
FormClosing
今、イベントを使用して達成するのは難しいと思います。ユーザーがどのボタンをクリックしても実行されるためです。それに対する救済策はありますか?
つまり、私は好きなものが必要ExitButtonPressed()
です..
c# - MDI Child から MDI メインフォームが閉じないようにする方法
MDI メインフォームがあります。その上でフォームをホストし、閉じる前にメッセージボックスを表示したい(変更を保存するかどうかをユーザーに尋ねる)。
ここまでは順調ですが、MDI メイン フォームを閉じても MDI 子の FormClosing イベントが発生しないことがわかりました。MDI メインの FormClosing イベント (発生します) でMdiChild .Close() を呼び出すだけだと考えました。この継ぎ目は機能しますが、問題が発生します...
私が表示するメッセージボックスで、変更を保存して閉じるのをキャンセルするのではなく、変更を保存するようにユーザーに提案します。通常はこれで問題なく動作しますが、MDI メインの FormClosing イベントをキャンセルする方法が見つからないようです。これを行うエレガントな方法はありますか?
編集:MDIメインのFormClosingイベントでキャッチされる例外をスローすることでこれを解決しました(ユーザーが閉じる手順をキャンセルすることを決定したとき)。このようにして、いつ MDI メインの FormClosing イベントをキャンセルしなければならないかがわかります。この継ぎ目は正常に機能します...しかし、この「hax」がこれを行う唯一の方法であるとは信じられません。きっともっと良い方法がありますか?
c# - FormClosing イベントで C# フォームが閉じない
コード ビハインドに次のコードを追加した後、フォームが閉じられません。
c# - C# でイベント ハンドラーをアンフックする方法
複数のフォームを持つ C# アプリケーションに取り組んでいます。
フォームの 1 つを開くと、次のようなイベント リスナーを追加しますSomeClass.MotionCompleted += new EventHandler(HandlerMethod);
。MotionCompleted イベントは静的イベントです。
このフォームを閉じた後も、イベントが発生したときに HandlerMethod が呼び出され、フォーム上の存在しない何かを更新しようとするため、例外が発生することに気付きました。
フォームがもう存在しない場合でも、イベントリスナーはどのように存在し、イベントに応答できますか? form.Close() または this.Close() が呼び出されたら、イベント リスナを自動的にアンフックして、もう呼び出されないようにするべきではありませんか?
c# - MDI子が閉じているときにC#MDI親が検出しますか?
MDI 子フォームが閉じたときに MDI 親で検出し、それに応じて反応しようとしています。MDI の親は、MDI の子が閉じるまで何もしないでください。これが私のコードです。何が間違っているのかわかりませんが、追加したフォームクローズイベントメソッドが呼び出されることはありません...
次のコードは、MDI 親クラスにあります。
助けてくれてありがとう!
c# - C#FormClosingイベントにコードを追加すると、MdiParentでXが無効になります
WinFormsアプリケーションで実行されている最小化を処理するための2つのバックグラウンドスレッドと1つのスレッドがあります。プログラムが終了するとき、私はこの方法を使用します。
labelsUpdaterThreadとprintNotifyThreadは常に実行されます。ご想像のとおり、MinimizeThreadは、親フォームが最小化されている場合にのみ実行されます。これが私の問題です:
上記のメソッドでthread.abortメソッドが呼び出された場合、MdiParentフォームの右上にある「X」は何もしません。クリックしても効果はありません。
上記のメソッドでthread.abortメソッドが呼び出されていない場合、スレッドはバックグラウンドスレッドであっても、使用できなくなったMdiParent上のリソースにアクセスしようとしているため、MdiParentを閉じると例外がスローされることがあります。
なぜこれが起こっているのかわかりませんが、私にはあまり意味がありません。助けてくれてありがとう!
c# - ユーザーが C# アプリケーションを閉じないようにするにはどうすればよいですか?
C#で閉じられていないアプリケーションを作成するには? フォームの「X」ボタンを無効にして、Windows タスク マネージャーがフォームを閉じないようにしたいです。
フォームが閉じないようにする 1 つの方法は、FormClosing
イベントを処理することですが、タスク マネージャーがフォームを閉じないようにするにはどうすればよいでしょうか?
.net - winforms アプリケーションでのウィンドウ クローズ イベント
winforms アプリケーションでフォーム ウィンドウを閉じたときに、ユーザーにデータを保存するように求めています。フォームの右上隅にある赤いボックスをクリックすると、ユーザーにプロンプトを表示する方法がわかりません。
私のアプリケーションには現在、ブール値のフラグがあり、textchanged イベントで True に設定されています。したがって、赤いボックスによってトリガーされるイベントのブール値を確認するだけで済みます。
何かアドバイス?
c# - 非表示のフォームに変更が保存されていない場合、C#アプリケーションの終了をキャンセルします
グーグルとスタックオーバーフローを検索した後、私の状況で役立つ答えが見つかりません。スタート メニュー (フォーム) を備えたアプリケーションがあります。ユーザーが(任意の)フォームのX(閉じる)を押すと、スタートメニューがリロードされます。その(メニュー)フォームが閉じられたときに、ユーザーがキャンセルを押した場合、現在非表示になっているフォームが編集モード(未保存の変更の有無にかかわらず)であるかどうかを確認してユーザーに通知したいそのフォームを表示し、アプリケーションが閉じないようにします。今私の問題は、アプリケーションが他のフォームのコードで停止するのをどのように停止するかです。this.close を呼び出すサブフォームの dispose メソッドをオーバーライドしているため、ok/cancel メッセージボックスが表示されますが、MB の後でスタート メニューが閉じてプログラムが停止します。
編集:ここでは、呼び出される順序でコードの一部を示します。どこが間違っていますか?
しかし、これはうまくいきません。アプリケーションはただ閉じます。
ランダム形式のクロージング イベント ハンドラ
編集: @cody gray が onclose に変更され、clean_form はまだ効果がありません。