、アプリケーションがデフォルト以外の何かを持っているための正しい方法(、それがクローズするのを待ち、フォームを開き、聖霊降臨祭の3つのタブを使用することができますexit)は、ApplicationContext
を継承するクラスを作ることです。次に、クラスのインスタンスをApplication.Run
メソッドに渡します。アプリケーションを終了するときは、クラス内からExitThread()
に電話してください。
この場合、アプリケーションの読み込み時に3つのフォームのインスタンスを作成し、イベントのハンドラを登録することができます。各フォームが閉じられると、ハンドラはまだ開いている他のフォームがあるかどうかをチェックし、そうでなければアプリケーションを終了します。
The example on MSDNは2つのことをやっている:
- は、複数のフォームを開くと、彼らはすべてしているときにアプリケーションを終了する各フォームが閉じているときに、フォームの最後のサイズと位置を保存
- を閉じました。
のみすべてのフォームが閉じられた後にアプリケーションを閉じシンプルな例:
class MyApplicationContext : ApplicationContext {
private void onFormClosed(object sender, EventArgs e) {
if (Application.OpenForms.Count == 0) {
ExitThread();
}
}
public MyApplicationContext() {
//If WinForms exposed a global event that fires whenever a new Form is created,
//we could use that event to register for the form's `FormClosed` event.
//Without such a global event, we have to register each Form when it is created
//This means that any forms created outside of the ApplicationContext will not prevent the
//application close.
var forms = new List<Form>() {
new Form1(),
new Form2(),
new Form3()
};
foreach (var form in forms) {
form.FormClosed += onFormClosed;
}
//to show all the forms on start
//can be included in the previous foreach
foreach (var form in forms) {
form.Show();
}
//to show only the first form on start
//forms[0].Show();
}
}
はその後、あなたのProgram
クラスは次のようになります。
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
}
アプリケーション閉鎖ロジックすることができます明らかにカスタマイズされています - まだ開いているフォームでも、これらの3つのタイプのうちの1つだけでも、最初の3つのインスタンス(最初の3つのインスタンスへの参照を保持する必要があります。)。
Re:各フォーム作成時のグローバルイベント - thisは有望そうです。
同様の例here。
これは唯一のことですが、プログラムの終了時期はどのようにわかりますか?ユーザーは、いつでもウィンドウを閉じることができます。 –
@DJBurb彼はどこで望ましいクローズド・ビヘイビアを指定しますか? * all * 3が閉じられたとき、* * 3が閉じられたとき、または特定のフォームが閉じられたときにアプリケーションが終了する必要がありますか? 1つ、または任意の2つは簡単です。すべては、より多くの仕事が必要です。 – Servy
私はあなた自身でそれを理解する必要があると思いますが、['Form.FormClosing'](http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing)を使用することができます。フォームが閉じられたときを見つけて、終了を中止し、代わりにフォームを非表示にすることができます。すべてのフォームが非表示になったら、アプリケーションを閉じます。 –