Gérer la fermeture d'une fenêtre [Résolu]

Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention - 14 nov. 2015 à 19:59 - Dernière réponse : Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention
- 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.
Afficher la suite 

10 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 14 nov. 2015 à 21:21
0
Utile
Bonjour,
Comment as-tu tenté d'utiliser l'évènement OnFormClosing du Form concerné et d'empêcher sa fermeture si condition non remplie ?
Commenter la réponse de ucfoutu
ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention - 15 nov. 2015 à 08:06
0
Utile
1
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+
Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention - 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.
Commenter la réponse de ManuAntibes
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 15 nov. 2015 à 09:56
0
Utile
2
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".

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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é.
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 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.
Commenter la réponse de Whismeril
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 15 nov. 2015 à 11:40
0
Utile
3
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

Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention - 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.
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention > Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention - 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.
Matthieu7503 22 Messages postés samedi 4 avril 2015Date d'inscription 15 novembre 2015 Dernière intervention > Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 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.
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.