Ответ 1
Используйте событие Closing
в окне, вы можете обрабатывать его таким образом, чтобы он не закрывался:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}
Как я могу поймать событие кнопки закрытия окна (красная кнопка X в правом верхнем углу окна) в форме WPF? У нас есть закрывающее событие, окно также выгружено, но мы хотим показать всплывающее окно, если он нажмет кнопку закрытия формы WPF.
Используйте событие Closing
в окне, вы можете обрабатывать его таким образом, чтобы он не закрывался:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}
если нажать кнопку подтверждения в форме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
}
В 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
на 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;
}
РЕШЕНИЕ:
Имейте флаг, чтобы идентифицировать, вызван ли метод 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
}
}