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

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

Ответы [ 5 ]

32 голосов
/ 23 января 2012

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

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
}
3 голосов
/ 16 апреля 2014

, если она нажата, кнопка подтверждения в форме 2 выполняет действие, если она нажата, кнопка Х ничего не делает:

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 
        }
0 голосов
/ 29 января 2019

РЕШЕНИЕ:

Имеет флаг , чтобы определить, вызывается ли метод 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
  }
}
0 голосов
/ 11 января 2019

в 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;
}
0 голосов
/ 26 ноября 2014

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...