2009-05-24 18 views
7

私はMicrosoft Visual C#2008 Expressを使用しています。C#フォームの終了ボタンにコードを追加するにはどうすればよいですか?

私のメインフォームには、右上のフォームを閉じるXボタンがあります。このボタンにコードを追加するにはどうすればよいですか?私のメニューには「Exit」という項目があり、データベースを整理して閉じるコードがあります。ユーザーが終了する方法としてこのボタンを選択した場合、このボタンに同じコードを追加するにはどうすればよいですか?

ありがとう!

-Adeena

答えて

12

FormClosingイベントを使用すると、フォームを閉じる任意の方法を捕捉する必要があります。

0

はあなたのWinフォームのクローズドイベントを使用してください。

+0

はその "FormClosed" または "FormClosing" である)、単に(廃棄を呼び出す そしてform'designで終了ボタンをクリックしてください?または私がやっていることがデータベースを閉じるようなものなのかどうかは関係ありません...? – adeena

+0

申し訳ありませんが、誤植:私はクローズイベントを意味しました。しかし、私はそれが、.NET 2.0からのFormClosed-Eventによって置き換えられていることを読みました –

7

フォームのデザインビューで、[プロパティ]ウィンドウで[イベント]ボタンを選択し、[FormClosed]および[FormClosing]イベントまでスクロールします。

フォームが閉じられた後にFormClosedが呼び出されます。

フォームを閉じても、あなたが近くをキャンセルすることを可能にする、オープンな形を保っている前FormClosingが呼び出される:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = true; 
} 
0

FormClosing/FormClosedを使用すると、アプリケーションと一致しているフォームのイベントを見ることができます終了する。ただし、Application.ApplicationExitという別のイベントがあります。あなたの主な方法で

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 

} 
0

このコードは、あなたが何かをできるようにするために「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); 
} 
1

「あなたはこのフォームを近く行うよろしいですか?」、そして、あなたはCancel = Trueを設定することができ、FormClosingを使用すると、フォームが開いたままであろう。

フォームが確実に閉じられたときにのみリソースを閉じるには、FormClosedイベントを使用します。

コード全体を管理している場合は、問題ではありません。しかし、あなたがしたくないのは、イベントの他のハンドラがフォームを開いたままにするときに、FormClosingを使用してリソースをクリーンアップすることです。

0

ダブル方法

0

フォームアクションメソッド //

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; 
        } 
     } 
0
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(); 
} 
関連する問題