Comment saisir l'événement du bouton de fermeture de la fenêtre (bouton X rouge sur le coin supérieur droit de la fenêtre) sous la forme wpf? Nous avons également l’événement de clôture, l’événement window non chargé, mais nous souhaitons afficher une fenêtre contextuelle s’il clique sur le bouton de fermeture du formulaire wpf.
Aide aimablement.
Utilisez l'événement Closing
dans la fenêtre, vous pouvez le gérer comme ceci pour éviter sa fermeture:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}
si vous appuyez sur le bouton de confirmation dans form2, effectuez l'action, si vous appuyez sur le bouton X, ne faites rien
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();
}
}
première forme:
public void Form2_Closing(object sender, CancelEventArgs e)
{
if(Form2.confirm == false) return;
//your code
}
at form1.Designer.cs put sous le code pour assigner l'événement
this.Closing += Window_Closing;
à form1.cs met la fonction de fermeture
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//change the event to avoid close form
e.Cancel = true;
}
SOLUTION:
Avoir un drapeaupour identifier si la méthode Close () est appelée à partir d'un bouton autre que l'icône X. (par exemple: IsNonCloseButtonClicked;)
Avoir une instruction conditionnelle à l'intérieur de la méthode Closing ()/ qui vérifie si IsNonCloseButtonClicked est false.
Si la valeur est false, l'application tente de se fermer par le biais d'un bouton autre que l'icône X. Si la valeur est true, cela signifie que le bouton icône X est cliqué pour fermer cette application.
[Exemple de code]
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
}
}
En 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
Pour désactiver le bouton Form 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