Comment puis-je fermer un formulaire lorsque l'utilisateur clique en dehors de la fenêtre du formulaire?
Je veux fermer un Système.De Windows.Les formulaires.Si l'utilisateur clique n'importe où à l'extérieur. J'ai essayé d'utiliser IMessageFilter, mais même alors, tous les messages sont transmis à PreFilterMessage. Comment puis-je recevoir clique en dehors d'un formulaire fenêtre?
OriginalL'auteur Simon | 2008-11-18
Vous devez vous connecter pour publier un commentaire.
Dans votre formulaire de Désactiver l'événement, mettre en "ce.Close()". Votre formulaire se ferme dès que vous cliquez sur n'importe où ailleurs dans Windows.
Mise à jour: je pense que ce que vous avez en ce moment est un bouton de Volume, et à l'intérieur de l'événement Click vous créez une instance de votre VolumeSlider formulaire et le faire apparaître en appelant ShowDialog() bloque jusqu'à ce que l'utilisateur ferme la remonté la forme. Dans la ligne suivante, vous pouvez lire le volume sélectionné par l'utilisateur et à utiliser dans votre programme.
C'est OK, mais comme vous l'avez remarqué qu'il oblige l'utilisateur à explicitement fermer la fenêtre pour revenir au programme principal. Show() est la méthode que vous voulez vraiment utiliser sur votre popup forme, mais Show() ne prend pas en bloc ce qui signifie que l'événement Click de retour sur votre formulaire principal finitions sans savoir ce que le nouveau volume est censé être.
Une solution simple est de créer une méthode publique sur votre formulaire principal comme ceci:
Puis, dans votre Volume événement Click du bouton (également sur le formulaire principal), vous assurez le VolumeSlider apparaissent comme suit:
Dans le VolumeSlider forme, que l'utilisateur travaille (je suppose) de la barre de défilement, vous mettez ce code dans la barre de défilement de l'événement ValueChanged (je pense que c'est ce qu'il est):
Et puis dans le VolumeSlider forme de l'événement Deactivate vous mettez cette.Close() comme mentionné ci-dessus. Votre formulaire sera alors se comporter comme prévu.
Moi: "Docteur, ça fait mal quand je fais cela." Médecin: "ne fais pas ça." Voir mes mises à jour ci-dessus en une seconde.
Laissez-moi savoir si cela fonctionne pour vous. Je déteste être désagréable et mauvais en même temps. 🙂
la forme de l'événement Deactivate ????mon C# forme n'ont pas un tel événement!
il ne vous: msdn.microsoft.com/en-us/library/...
OriginalL'auteur MusiGenesis
Grâce à p-papa dans cette question, j'ai trouvé cette solution qui me permet d'utiliser ShowDialog:
mm... Ça ne fonctionne pas comme prévu après tout - lors du chargement du formulaire, j'ai le "main" curseur de la souris, et cliquer en dehors de la ferme. Si je veux interagir avec le formulaire lui-même, le premier clic ne semble claire la "Capture", et de ne pas s'inscrire dans le formulaire (en cliquant sur une case à cocher ne pas le vérifier, par exemple), et ensuite de cliquer en dehors de ne pas fermer la fenêtre. Est-il un autre moyen pour ce faire?
la simplicité est votre forme? Si c'est juste un enfant, vous pouvez paramétrer l'enfant de capturer plutôt que de la forme.
C'est OnMouseCaptureChanged pas OnCaptureChanged
J'ai utilisé OnVisibleChanged et OnMouseCaptreChanged et il fonctionne, mais quelques fois la souris est caché.
OriginalL'auteur Simon
Avec Simon solution que j'ai eu le même Problème describt par Noam. Avec le code suivant, j'ai éviter la "Cliquez" problème...
C'est la véritable réponse correcte. Lorsque vous cliquez en dehors d'un formulaire qui a été ouvert avec
ShowDialog()
, 3 messages sont envoyés:WM_NCACTIVATE
,WM_ACTIVATE
etWM_ACTIVATEAPP
. N'utilisez pas la 3ème, mais le 2ème (WM_ACTIVATE
) peut-être encore mieux que le 1er. Aussi, ne pas oublier de mettreDialogResult
!OriginalL'auteur rkraen
Si c'est un enfant de formulaire dans une application MDI, vous pouvez intercepter les cliquez dans le formulaire parent, sinon la solution sera en désordre.
Je ne suis pas convaincu de ce que vous suggérer représente l'INTERFACE utilisateur intuitive du comportement de toute façon. Êtes-vous sûr que c'est la meilleure conception?
Ce n'est pas trop différent d'une zone de liste déroulante - le choix de la liste disparaît dès que vous cliquez à un autre endroit.
OriginalL'auteur Galwegian
Si vous essayez de faire une fenêtre pop-up qui se comporte un peu comme un menu, sauf qu'il vous permet d'interagir avec vos contrôles, vous pouvez essayer de l'hébergement d'un usercontrol à l'intérieur d'un toolstrip déroulante.
OriginalL'auteur
DE FAÇON SIMPLE :
sur Form1 utiliser ce code pour appeler form2:
et ensuite utiliser ce code sur form1 nouveau :
OriginalL'auteur Sharif Lotfi
c'est simple :
OriginalL'auteur Hiep Nguyen