Fermeture Windows

Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour à tous,
J'ai une appli qui bloque l'événement Close avec e.Cancel true ce qui bloque la fermeture de windows. et donc j'utilise WM_QUERYENDSESSION pour détécter quand windows est fermer et le cas echéant mettre e.Cancel false. Le problème est que cette form qui utilise e.Cancal = true appelle une form modal qui utilise le même système ce qui fait que ca ne marche plus.Le

fait d'appeler une form
modale à partir d'une form modale bloque la boucle des messages de la
première, ce qui fait que le message

est perdu pour
la form principale, donc elle n'y réponds pas. Sans réponse, Windows
arrête le processus de fermeture. Comment faire pour être sur dans ce cas que mon appli ne bloque pas la fermeture de windows ? peut ont redemander à l'appli de relancer une fermeture de windows ?

Par avance, merci.

3 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je pense que le mieux est d'utiliser une variable 'globale' (dans un singleton par exemple) et de la setter à true lorsque tu détectes le WM_QUERYENDSESSION.

pour être sûr de récupérer le message, fait toi une classe Form qui surcharge le message WndProc et qui écoute ce message. Ensuite pour chaque formulaire, au lieu d'hérité de System.Windows.Forms.Form, tu hérites de ta classe.

Facile à mettre en place, et en plus c'est efficace !


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Et si tu utilise l'évènement FormClosing dans chaque forme, ça ne marche pas !?

( pas envie d'éteindre mon PC pour tester )

protected override void OnFormClosing( FormClosingEventArgs e )
{
base.OnFormClosing( e );


if ( e.CloseReason != CloseReason.WindowsShutDown )
e.Cancel = true;
}
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
ca marche en .net 2.0... mais


emmanuel est en .net 1.1


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]