Fermeture Windows

cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 29 mars 2006 à 16:43
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 29 mars 2006 à 19:27
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 mars 2006 à 17:03
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#]
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 mars 2006 à 17:44
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;
}
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 mars 2006 à 19:27
ca marche en .net 2.0... mais


emmanuel est en .net 1.1


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0
Rejoignez-nous