web-dev-qa-db-ja.com

wpf形式でウィンドウクローズボタン(ウィンドウ右上隅の赤いXボタン)のイベントをキャッチする方法は?

WPFフォームでウィンドウ閉じるボタン(ウィンドウ右上の赤いXボタン)のイベントをキャッチするにはどうすればよいですか?クロージングイベント、ウィンドウアンロードイベントもありますが、WPFフォームの閉じるボタンをクリックするとポップアップが表示されます。

25
HotTester

ウィンドウでClosingイベントを使用すると、次のように処理して、閉じることを防ぐことができます。

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
}
32
Natxo

form2の確認ボタンが押された場合はアクションを実行し、Xボタンが押された場合は何も実行しません。

public class Form2
{
  public bool confirm { get; set; }

    public Form2()
        {
            confirm = false;
            InitializeComponent(); 
        }

   private void Confirm_Button_Click(object sender, RoutedEventArgs e)
    {
       //your code
       confirm = true;
       this.Close();

    }

}

最初の形式:

public void Form2_Closing(object sender, CancelEventArgs e)
        {
            if(Form2.confirm == false) return;

            //your code 
        }
3
Vojtana

at form1.Designer.csイベントを割り当てるコードの下に配置

this.Closing += Window_Closing;

at form1.csクロージング関数を配置

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    //change the event to avoid close form
    e.Cancel = true;
}
0
Jemt tinhwa

解決策:

フラグを持っている Close()メソッドがXアイコンボタン以外から呼び出されているかどうかを識別します。 (例:IsNonCloseButtonClicked;)

Closing() IsNonCloseButtonClickedがfalseであるかどうかを確認するイベントメソッド内に条件文を設定します。

Falseの場合、アプリはXアイコンボタン以外で自分自身を閉じようとしています。 trueの場合、このアプリを閉じるためにXアイコンボタンがクリックされたことを意味します。

[サンプルコード]

private void buttonCloseTheApp_Click (object sender, RoutedEventArgs e) {
  IsNonCloseButtonClicked = true;
  this.Close (); // this will trigger the Closing () event method
}


private void MainWindow_Closing (object sender, System.ComponentModel.CancelEventArgs e) {
  if (IsNonCloseButtonClicked) {
    e.Cancel = !IsValidated ();

    // Non X button clicked - statements
    if (e.Cancel) {
      IsNonCloseButtonClicked = false; // reset the flag
      return;
    }
  } else {

    // X button clicked - statements
  }
}
0
Naveen Kumar V

VB.NETの場合:

    Private Sub frmMain_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    ' finalize the class

    End Sub

フォームXボタンを無効にするには:

'=====================================================
' Disable the X button on the control bar
'=====================================================
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Dim myCp As CreateParams = MyBase.CreateParams
        myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
        Return myCp
    End Get
End Property
0
JA12