roinou
Messages postés21Date d'inscriptiondimanche 8 mai 2005StatutMembreDernière intervention 7 novembre 2005
-
4 oct. 2005 à 12:15
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
7 oct. 2005 à 02:00
Salut à tous,
Je voudrai empecher la fermeture d'une fenètre MDI Fille (toute les
fenètres en fait). Idéalement cela reviendrai à griser la croix, ou
bien remplacer l'action de fermeture par la réduction. J'ai trouvé des
codes en VB, mais aucun en C#.
Aidez moi SVP!!
PS : Il est possible de désactiver les 3 bouton supérieurs, mais dans la mesure du possible, je voudrai l'éviter.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 4 oct. 2005 à 12:53
Cependant, s'il veut fermer sa form parente, ca va annuler l'evenement aussi :/
A noter que si tu bosses avec le .net 2.0, tu as juste a regarder si la
propriété FormClosingEventArgs.CloseReaser est différente de
CloseReason.MdiFormClosing
roinou
Messages postés21Date d'inscriptiondimanche 8 mai 2005StatutMembreDernière intervention 7 novembre 2005 4 oct. 2005 à 15:43
Merci pour ta réponse Lutinore, bien que je trouve ça un peu crade.
J'avais pensé à une solution très similaire, mais je pense que le point
important est de surcharger la méthode WndProc, pour changer la valeur
de close AVANT que le systeme ferme les fenetres filles.
Par contre, si je puis me permettre, il serais plus judicieux de ne pas
surcharger OnClosing, mais plutot d'utiliser les évènements. Après
tout, ils sont la pour ça... Qu'en penses-tu?
ChildForm.Closing += new System.ComponentModel.CancelEventHandler(this.VehiculeForm_Closing);
Voila, maintenant, il existe des propriétés pour griser les boutons
maximise et minimise, peut-etre qu'en fouillant un peu et en dérivant
on peut atteindre cette p**** de croix.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 4 oct. 2005 à 16:45
Pour les évènements ça ne change pas grand chose mais je me réfère à ce qui est écrit dans la documentation:
"La méthode OnClosing autorise également les classes dérivées à gérer l'événement sans y attacher de délégué. Cette technique est recommandée pour gérer un événement dans une classe dérivée."
C'est la méthode de la classe de base qui appelle les délégués inscrits.
roinou
Messages postés21Date d'inscriptiondimanche 8 mai 2005StatutMembreDernière intervention 7 novembre 2005 6 oct. 2005 à 19:31
Après un peu de recherche, j'ai l'impression que ta méthode ne marche
que sur des systèmes inférieurs à Windows 2K. Y a t'il une equivalence
pour Windows XP?
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 6 oct. 2005 à 19:38
ca marche avec XP... je l'utilise sans soucis...
modifie la méthode comme ceci :
private void FormCloseButtonEnable(bool enable, Form from) {
if (!enable) {
// Grise le bouton Fermer de la fenêtre (croix)
EnableMenuItem(GetSystemMenu(form.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);
} else {
// Rend actif le bouton Fermer de la fenêtre
EnableMenuItem(GetSystemMenu(form.Handle, false), SC_CLOSE, MF_BYCOMMAND | MF_ENABLED);
}
}
comme ca, tu passes la référence du formulaire dont tu veux griser la croix