Microsoft Visual C# 2008 Express を使用しています。
私のメイン フォームには、フォームを閉じる X ボタンが右上にあります。このボタンにコードを追加するにはどうすればよいですか? 私のメニューには「Exit」項目があり、データベースをクリーンアップして閉じるコードがあります。ユーザーが終了方法としてこのボタンを選択した場合、このボタンに同じコードを追加するにはどうすればよいですか?
ありがとう!
-アディーナ
FormClosing イベントを使用すると、フォームを閉じるあらゆる方法をキャッチする必要があります。
フォームのデザイン ビューの [プロパティ] ウィンドウで、[イベント] ボタンを選択し、"FormClosed" および "FormClosing" イベントまで下にスクロールします。
FormClosed は、フォームが閉じられた後に呼び出されます。
FormClosing はフォームが閉じられる前に呼び出され、フォームを開いたまま閉じをキャンセルすることもできます。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
ユーザーに「このフォームを閉じてもよろしいですか?」と尋ねたい場合はFormClosing
、設定できる場所で を使用Cancel = True
し、フォームを開いたままにします。
フォームが確実に閉じられたときにのみリソースを閉じたい場合は、FormClosed
イベントを使用します。
コード全体を管理している場合、それは問題ではありません。しかし、発生したくないFormClosing
のは、イベントの他のハンドラーがフォームを開いたままにするときに、リソースをクリーンアップすることです。
フォームアクションメソッド//
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
switch (MessageBox.Show(this, "Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo))
{
case DialogResult.No:
e.Cancel = true;
break;
default:
break;
}
}
このコードは、ユーザーが「X」をクリックするか、フォームで Alt-F4 を使用して何かを実行できるようにすることをキャプチャします。クロージング イベントを呼び出すアクションが必要だったので、これを使用する必要がありましたが、レース イベントのために FormClosing イベントを使用すると呼び出されませんでした。
/// <summary>
/// This code captures the 'Alt-F4' and the click to the 'X' on the ControlBox
/// and forces it to call MyClose() instead of Application.Exit() as it would have.
/// This fixes issues where the threads will stay alive after the application exits.
/// </summary>
public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
MyClose();
base.WndProc(ref m);
}
winform の Closed-Event を使用します。
form'design の終了ボタンをダブルクリックしてから、単に Dispose() メソッドを呼び出します。
You can use form closing events choose or set closing event in properties window
You can add dialog conditions based on what task you want to perform before closing form
private void Form1_FormClosing(object sender,FormClosingEventArgs e)
{
Application.Exit();
//you can also use Application.ExitThread();
}
FormClosing/FormClosed を使用すると、アプリケーションの終了と同時に発生するフォームのイベントを監視できます。ただし、Application.ApplicationExit という別のイベントを関連付けることができます。
あなたの Main メソッドで:
Application.ApplicationExit += Application_ApplicationExit;
...
private static void Application_ApplicationExit(object sender, EventArgs e) {
// do stuff when the application is truly exiting, regardless of the reason
}