Je sais que je peux voir si un widget particulier a le contrôle dans SWT en utilisant Je suis capable de gérer les événements de clavier avec des auditeurs Traverse, mais une mise au point de changement à l'aide de clics de la souris apparaît sur Mystetify My Demande. Je ne peux pas sembler comprendre comment trouver l'article qui a pris la focalisation de l'élément précédent. P>
J'ai aussi des problèmes avec la mise au point de manière fiable sur un autre widget à partir d'un lecteur code> focallost code> si l'accent est modifié par un événement de souris. P>
Toute suggestion? P> isfocuscontrol () code> dessus. Cependant, lorsque mon widget attendu ne se concentre pas, comment puis-je déterminer ce que fait (en d'autres termes, qu'est-ce qui s'est focalisé)? p>
4 Réponses :
C'est:
Display.getFocusControl();
Ok, j'ai essayé ça. Cela semble renvoyer un contrôle. Lorsque j'utilise Tostring () dessus afin de lire quel contrôle a la concentration, il dit simplement du texte {}. Puis-je obtenir plus de détails de cette fonction?
Quel genre de détails? Pourquoi n'appelez-vous aucune des fonctions de getter du contrôle pour obtenir plus de détails.
Ou utilisez la fonction getparent () pour voir où il convient à la hiérarchie.
J'essaie de déterminer le nom de la composante texte qui a pris l'accent. Des getters disponibles pour le contrôle, je n'ai pas vu de getter qui était capable de le faire. getparent () code> m'a simplement dit que l'élément était dans la même shell que tout le reste.
Généralement parlant son impossible. Vous pouvez avoir n variables référencer le contrôle, le contrôle peut être dans un tableau ou même non référencé du tout. Nous avons eu le même problème et avons utilisé la réflexion à la réflexion sur les champs du composant parent et de regarder, lesquels d'entre eux contiennent le contrôle, comme une "meilleure hypothèse", mais cela n'aidera pas toujours.
Comme expliqué, afficheur.getfocuscontrol () vous indique quel contrôle a la mise au point. Vous pouvez associer des informations avec des widgets via les méthodes SeData (). Vous pouvez le faire avec chaque contrôle qui pourrait éventuellement obtenir la concentration, puis GetData () devrait vous aider à déterminer ce que le contrôle a la mise au point. P>
Sinon, vous pouvez simplement garder les pointeurs aux commandes que vous avez créées et comparez le pointeur sur vos pointeurs de contrôle connus, non? P>
GetFocusControl renvoie un contrôle et votre élément hérite du contrôle. J'utilise un tas de contrôles personnalisés et lorsque je reçois la mise au point, je détermine ensuite quelle classe il s'agit vraiment d'utiliser un ensemble de déclarations si (instance de contrôle de MyClass) (sinon IFS après le premier) Ensuite, une fois que j'ai la vraie classe, je mets ensuite à cette classe et appelez les méthodes de getter appropriées que je mets dans ma classe. p>
J'espère que cela aide, p>
Puisque c'est un délicat, laissez-moi ajouter quelque chose concernant la deuxième partie de la question:
J'ai également des problèmes avec la mise au point de manière fiable sur un autre widget à partir d'un auditeur Fewtlost si l'accent est modifié par un événement de souris. p> BlockQuote>
Lors du changement de mise au point avec la souris, l'événement de la souris est traité après les événements de mise au point. Cela pourrait provoquer l'événement de la souris de révoquer des modifications que vous appliquez dans les événements de mise au point. P>
Par exemple, pour sélectionner le contenu d'un champ de texte après la mise au point de la souris, un appel ASYNC permet de Retardez la sélection jusqu'à ce que les événements soient expédiés. P>
xxx pré> sans l'appel ASYNC, l'événement de la souris révoque la sélection effectuée dans l'événement de mise au point. P> P>