Gérer la fermeture d'une fenêtre

Résolu
Utilisateur anonyme - 14 nov. 2015 à 19:59
 Utilisateur anonyme - 15 nov. 2015 à 16:08
Bonjour à toutes et à tous,

Mon problème n'est pas très grand, mais pour des question pratiques, je viens vous demander conseil :

Je développe actuellement un petite application qui possède de nombreux paramètres, et ces paramètres, il faut bien les enregistrer, mais le problème est là, c'est l'utilisateur peut fermer la fenêtre sans que ces paramètres n e soient sauvegardés.

Ma question est donc la suivante, est-il possible d'interdire à l'utilisateur de fermer la fenêtre par le biais du raccourcis clavier "ALT+F4", sans rendre impossible la fermeure de celle-ci, car jusqu'à présent, les solutions que j'ai trouvé ne m'ont jamais satisfait, car j'étais obligé d'avoir recours à la fermeture de l'application en entier, ce qui est bien plus embêtant.

J'espère avoir été assez clair dans mes exsplications,

Merci d'avance.

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 nov. 2015 à 21:21
Bonjour,
Comment as-tu tenté d'utiliser l'évènement OnFormClosing du Form concerné et d'empêcher sa fermeture si condition non remplie ?
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
15 nov. 2015 à 08:06
Salut à tous

oui ucfoutu a raison as tu utilisé "FormClosing", moi je m'en sers ça va très bien.

Private Sub Form_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
If Fin_Temps_Sablier = False Then ' impossible de fermer la fenetre temsp que le sablier n'est pas fini.
e.Cancel = True
End If
End Sub


A+
0
Utilisateur anonyme
15 nov. 2015 à 09:32
J'ai effectivement utilisé, lors de l'évènement FormClosing, la manière e.Cancel = True, mais ne trouvant pas très propre l'utilisation d'une variable, je souhaite juste savoir si il est possible de détecter uniquement l'évènement d'appui des touches "ALT+F4" afin que l'on soit obligé de fermer le formulaire via le bouton enregistrer.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
15 nov. 2015 à 09:56
Bonjour

tu peux essayer de mettre la propriété KeyPreview de ta form à True, puis dans l'événement KeyDown, ou Keypress (je n'ai pas de quoi tester là), intercepter cette frappe pour alimenter la variable qui empêchera la fermeture comme te l'ont proposé Uc et Manu.

Cependant, Alt + F4 est un raccourci windows, je ne suis même pas sûr que ta form puisse l'intercepter.
Il te faudra alors faire un "hook clavier".

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 nov. 2015 à 10:17
Bonjour, Whismeril,
ALT + F4 ferme et provoque donc l'évènement de fermeture. Donc pas de soucis à ce niveau, si l'on subordonne la fermeture à des conditions (et annulation si conditions non réunies).
Il en irait bien sûr différemment avec un break total (CTRL/ALT/SUPP), mais il s'agirait alors de toute autre chose et d'un acte parfaitement délibéré.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656 > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
15 nov. 2015 à 10:26
Bonjour Uc, oui on passera forcément dans FormClosing, c'est vis à vis du KeyPress/Down, que je ne suis pas sûr.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
15 nov. 2015 à 11:40
Bonjour à tous,

J'ai fait un essai en fermant le Form avec Alt F4. Si tes paramètres sont mis comme ci-dessous, ils sont pris en compte lors de la fermeture. donc ce n'est pas la peine de chercher une solution tarabiscotée.

 Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        ' Fixer la position et la taille de la fenêtre sauvés dans le fichier My.Settings
        My.Settings.WindowState = CBool(Me.WindowState)
        My.Settings.frm_szTaille = CType(Me.Size, Point)
        My.Settings.frm_ptPosition = Me.Location
        My.Settings.Save()
    End Sub

0
Utilisateur anonyme
15 nov. 2015 à 12:23
Merci à tous de votre aide, je pense choisir un système de variable, ce qui semble être la solution la plus simple car je préfère que l'utilisateur choisisse entre seuvegarder ou non les paramètres avant fermeture.
J'utiliserais donc pour les curieux la solutions proposée par ManuAntibes.
Et concernant la réponse de cs_Le Pivert, je ne sauvegarde pas les paramètres de cette manière, mais j'utilise la base de registre, que je trouve plus utile car cela permet plus facilement de modifier les paramètres manuellement en cas de problème.

Merci à tous, je met le sujet en résolu, et si je trouve un moyen de faire ce que je recherche exactement, je vous en informerai.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656 > Utilisateur anonyme
15 nov. 2015 à 14:26
Et concernant la réponse de cs_Le Pivert, je ne sauvegarde pas les paramètres de cette manière, mais j'utilise la base de registre, que je trouve plus utile car cela permet plus facilement de modifier les paramètres manuellement en cas de problème.


C'est doublement une erreur:
  • d'abord parce que le registre doit être utilisé avec parcimonie, plus il est gros et plus windows rame et une erreur en le modifiant peut-être catastrophique.
  • Le fichier de config est un xml, il est donc très simple de l'éditer avec notepad.
0
Utilisateur anonyme > Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024
15 nov. 2015 à 16:08
Je sais bien, je fais extrêmement attention en travaillant dessus, et je ne touche pas à des clés ou valeurs que je n'ai pas créé.
Et concernant la taille du registre, je ne met pas grand chose dedans, ce qui, en somme, ne modifiera en rien les performances de Windows.
Pour ce qui est de l'édition manuelle des paramètres, cela est de toute manière réservé à un utilisateur expérimenté, car en aucun cas un utilisateur standard ne saurait où trouver le chemin dans la base de registre, ou même celui du fichier de config xml.
0
Rejoignez-nous