Как поймать событие кнопки закрытия окна (красная кнопка X в правом верхнем углу окна) в форме wpf?

Как я могу поймать событие кнопки закрытия окна (красная кнопка X в правом верхнем углу окна) в форме WPF? У нас есть закрывающее событие, окно также выгружено, но мы хотим показать всплывающее окно, если он нажмет кнопку закрытия формы WPF.

Ответы

Ответ 1

Используйте событие Closing в окне, вы можете обрабатывать его таким образом, чтобы он не закрывался:

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

Ответ 2

если нажать кнопку подтверждения в форме2, выполните действие, если она нажата, кнопка 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

В 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

Ответ 4

на form1.Designer.cs поставить код ниже, чтобы назначить событие

this.Closing += Window_Closing;

в form1.cs ставим закрывающую функцию

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

Ответ 5

РЕШЕНИЕ:

Имейте флаг, чтобы идентифицировать, вызван ли метод Close() от кнопки со значком X. (например: IsNonCloseButtonClicked;)

Есть условный оператор внутри метода события Closing(), который проверяет, является ли IsNonCloseButtonClicked ложным.

Если значение равно false, приложение пытается закрыть себя, кроме кнопки со значком X. Если это правда, это означает, что кнопка 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
  }
}