cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011
-
11 mars 2011 à 00:02
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011
-
14 mars 2011 à 22:05
Bonsoir,
3 jours de recherches et toujours pas de solution. Je désespère un peu...
Je développe une application de type "Lanceur d'applications pour clé USB". Le projet se concentre sur une winform skinable. Pour cette raison le formulaire est nu (pas de barre titre, ni boutons maximise/minimise...). Il n'apparait pas non plus en taskBar (ShowStakBar=False).
Un notifyIcon est présent dans systay et je rencontre un problème de gestion de focus.
Le notifyIcon est lié à un contextmenustrip et lorsque je click sur l'icone mon formulaire se désactive ????? Le notifyIcon est un control enfant de mon formulaire, je ne comprends donc pas que le form se désactive !
La solution je la connais mais ne trouve pas le moyen de la codée. Dans la gestion de mon évènement Form.Desactivate il me faut savoir si c'est un click sur le notifyIcon qui en est à l'origine, mais comment récupéré cette information ?
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 12 mars 2011 à 10:29
Bonjour
J'ai eu à faire ce genre de truc, et voila comment j' l'ai résolu:
en fait je joue sur le WindowsState et le ShowInTaskbar plutot que le Show/Hide
Et je n'ai pas de probleme de focus.
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011 11 mars 2011 à 00:10
Petite précision, je gère les mouseEvent sur le notifyIcon, j'ai donc essayé d'ajouté un Flag pour informer mon Form.Desactivate. Le soucis c'est que l'événement Form.Desactivate intervient avant que mon Flag soit en place dans mon notifyIcon.mouseDown.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 11 mars 2011 à 10:18
Salut,
je comprends pas bien le souci. En effet c'est le comportement normal que tu décris : quand tu cliques en-dehors d'un objet, celui-ci perd le focus (c'est la définition même du focus).
y'a-t-il un but précis à ce que tu veuilles que ta Form garde le focus ? Ce que tu pourrais faire à la rigueur c'est, à la fin de ton Event Click (ou MouseClick), rendre la main à ta Form avec un simple appel à this.Focus().
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011 11 mars 2011 à 11:20
Merci pour ta réponse.
"En effet c'est le comportement normal que tu décris" pas tout à fait... le notifyIcone fait bien parti du formulaire (c'est un enfant) donc pour moi un click sur ce dernier ne devrait pas activé le "Desactivate" du dit formulaire^^
Ce que j'essaie de faire c'est de donner à mon application un comportement proche des logiciels classiques, à savoir :
Mon logiciel est un lanceur d'applications, s'il est visible mais que l'utilisateur fait le choix de travailler sur un autre logiciel ou dans Windows, le formulaire se désactive (Event Desactivate) ca ca fonctionne.
Mon logiciel est affiché, l'utilisateur click droit sur l'icone de notifycation pour atteindre le menu contextuel, si le formulaire est visible il ne doit pas disparaitre, pourtant il y a perte de focus donc il devient invisible et ca c'est pas bon.
Autre cas de figure, l'utilisateur click gauche sur l'icone de notification deux possibilités, le formulaire est visible, son click le rend invisible ou le formulaire est invisible et dans ce cas il devient visible mais là encore le focus interfère.
Devant ce constat il me faut savoir au moment d'exécuter le désactivate, s'il a été enclenché à cause d'un click sur notifyIcon et auquel cas je n'exécute pas le code de perte de focus du formulaire.
Ai-je été plus précis ? merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 11 mars 2011 à 14:52
c'est pas mal précis oui ^^
mais en fait tu Hide() ta Form sur l'event Deactivate ?
PS : un NotifyIcon n'est pas un Control à proprement parler, comme tu as pu -malheureusement- le constater, il ne réagit pas de la même manière qu'un Label ou un Panel ;)
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011 12 mars 2011 à 00:03
"mais en fait tu Hide() ta Form sur l'event Deactivate ?" effectivement de passe this=;visible à false. Comme tu le dis très bien le notifyIcon ne semble pas réellement être un enfant de ma form, ce qui pose problème car en cliquant je perds le focus, ce qui n'aurait pas été le cas de tout autre control enfant. Il ne faut donc savoir quand l'évennement Desactivate se produit si le notifyIcon en est la cause en récupérant cette information (par je ne sais quelle magie ^^) je pourrais annuler le Desactivate du form, mais comment coder cela hum....
cs_luminor
Messages postés30Date d'inscriptionmardi 27 avril 2010StatutMembreDernière intervention24 mars 2011 14 mars 2011 à 22:05
Après quelques tests avec la solution de Robert33 (que je remercie^^) mon problème est résolu... Il est en effet plus facile et souple de jouer avec maximise/minimise plutôt que hide/show.