0

複数のフォームを持つ C# アプリケーションがあります。すべてのフォームに、キャンセル ボタンと右上 (x) ボタンがあります。すべてのフォームに対して、次のような cancelButton_Click() を作成しました。

private void cancelButton_Click(object sender, EventArgs e)
{
    Application.Exit();
}

これは、次のような formClosing 関数を呼び出します。

private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
   string exitMessageText = "Are you sure you want to exit the application?";
   string exitCaption = "Cancel";
   MessageBoxButtons button = MessageBoxButtons.YesNo;
   DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
   if (res == DialogResult.Yes)
   {
       e.Cancel = false;

   }
   else if (res == DialogResult.No)
   {
       e.Cancel = true;
   }
}

同様に、すべてのフォームに対して Closing イベントを異なる方法で処理したいので、すべてのフォームに対してカスタマイズされた formClosing 関数を作成しました。

ただし、たとえば Form2 の [キャンセル] ボタンをクリックすると、コントロールは Form1 Closing イベント関数に移動します。これを実装するより良い方法はありますか?提案してください。

4

2 に答える 2

1

次のような新しいクラスを作成します

public static class ApplicationCloseHelper
{
    public static void CloseApplication()
    {
        if (UserIsSure())
        {
            Application.Exit();
        }
    }

    private static bool UserIsSure()
    {    
        string exitMessageText = "Are you sure you want to exit the application?";
        string exitCaption = "Cancel";
        MessageBoxButtons button = MessageBoxButtons.YesNo;
        DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
        return res == DialogResult.Yes;
    }
}

Form_Closing次に、イベントハンドラーを削除して呼び出します

ApplicationCloseHelper.CloseApplication();

から直接Cancel_Click();

于 2014-02-03T18:17:36.573 に答える
0

ええ、達成しようとしていることを実行できるより良い方法があります。次のようにしてください。

private void cancelButton_Click(object sender, EventArgs e)
{
    Close();
}

private void FormLoginPage_Closing(object sender, FormClosingEventArgs e)
{
   string exitMessageText = "Are you sure you want to exit the application?";
   string exitCaption = "Cancel";
   MessageBoxButtons button = MessageBoxButtons.YesNo;
   DialogResult res = MessageBox.Show(exitMessageText, exitCaption, button, MessageBoxIcon.Exclamation);
   if (res == DialogResult.Yes)
   {
       e.Cancel = false;
       Application.Exit();
   }
   else if (res == DialogResult.No)
   {
       e.Cancel = true;
   }

}

そうすれば、最初にユーザーにとって直感的な現在のフォームを閉じてから、他のフォームの終了イベントをトリガーするアプリケーションを閉じます。

于 2014-02-03T17:35:46.050 に答える