どのように私はC#のフォームで終了ボタンにコードを追加しますか?

StackOverflow https://stackoverflow.com/questions/904345

  •  05-09-2019
  •  | 
  •  

質問

私は、Microsoft Visual C#2008 Expressを使用しています。

私のメインフォームでは、Xボタンは右上のフォームを閉じますことがあります。どのように私は、このボタンにコードを追加しますか?私のメニューでは、私は、「終了」項目を持っており、それがクリーンアップして、私のデータベースを閉じ、コードを持っています。ユーザーが道として終了することを選択した場合どのように私は、このボタンに同じコードを追加しますか?

ありがとうございます。

-Adeena

役に立ちましたか?

解決

FormClosingイベントを使用すると、フォームを閉じるのいずれかの方法をキャッチする必要があります。

他のヒント

フォームのデザインビューでは、[プロパティ]ウィンドウ内、イベントボタンを選択し、「FormClosed」と「FormClosing」のイベントにスクロールダウンします。

フォームが閉じられた後に、

FormClosedが呼び出されます。

フォームが閉じられる前に、

FormClosingが呼び出され、また、開いているフォームを保ち、あなたが近くをキャンセルすることができます:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}
ユーザーを依頼したい場合は、

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

フォームが確実に閉じているときにのみ、いくつかのリソースをクローズしたい場合は、

、あなたはFormClosedイベントを使用します。

あなたはコード全体を制御している場合は、

、それは一種の問題ではありません。しかし、何が起こることを望んでいないことはクリーンアップするためのリソースを、イベントの他のハンドラが開いているフォームを維持するときFormClosingを使用しています。

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

}

あなたのWinフォームのクローズドイベントを使用します。

このコードは、ユーザー「X」をクリックするか、あなたが何かをできるようにするために、フォーム上のAlt-F4を使用してキャプチャします。私は私のclosingイベントを呼び出すためにアクションを必要とするので、これを使用していた、とによるレースイベントに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);
}

ダブルその後、form'designで終了ボタンをクリックしてください 単に廃棄()メソッドを呼び出す

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

 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;
                     }
         }
 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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top