49 votes

Quelle est la différence entre Control.Select () et Control.Focus ()?

Dans WinForms, pour définir le focus sur un contrôle spécifique, je semble toujours finir par appeler Control.Select() et Control.Focus() pour le faire fonctionner.

Quelle est la différence, et est-ce la bonne approche?

24voto

Daniel A. White Points 91889

Le focus est une méthode de bas niveau destinée principalement aux auteurs de contrôles personnalisés. Au lieu de cela, les programmeurs d'applications doivent utiliser la méthode Select ou la propriété ActiveControl pour les contrôles enfants ou la méthode Activate pour les formulaires.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

6voto

Kyle Breton Points 61

Pour un exemple de la façon dont ils sont différents, si vous essayez de définir un contrôle pour une application Forms sur le focus par défaut lorsque vous l'ouvrez, seul Select () fonctionnera lorsqu'il sera appelé dans le constructeur après InitializeComponent (). Focus () ne le fera pas.

3voto

Tim Points 41

Juste pour ajouter à ce fil, j'ai constaté que lors de l'écriture d'un contrôle utilisateur qui se sont déplacés d'autres contrôles d'un formulaire à un autre (formulaire nouvellement créé). La forme originale peut plus sélectionner le contrôle, mais en utilisant l'accent autorisés à le faire. Je pense que cela met en valeur les réponses sur les niveaux de ces méthodes de travail à la. Mais cela signifie aussi qu'il n'est pas simple suffisant pour dire que l'utilisation de Sélectionner au plus haut niveau depuis sélectionner n'a plus fonctionné comme prévu sur l'original du formulaire (pas qu'il devrait être je l'ai placé dans une forme différente - j'accepte que)

1voto

DEVELOPER Points 1

Par expérience personnelle, j'ai écrit un contrôle utilisateur hériter de la Windows ComboBox. J'ai eu à écrire le code pour remplacer l' OnEnter événement et j'ai eu une déclaration de là en disant:

If Me.Focused Then ... Else ...

Toutefois, malheureusement, il a renvoyé le résultat inattendu. Si j'ai appelé, MyCustomerComboControl.Select (soit en Charge, Montré ou d'activer les événements), il appelle l' OnEnter méthode, mais a échoué à enregistrer il avait le focus (c'est à dire Centrée était Faux), mais si j'ai appelé le Focus, il a travaillé. En outre, Select de travail que si le formulaire a été ouvert c'est à dire si j'ai choisi un autre contrôle, puis re-sélectionné le contrôle d'origine tout était bien. Donc, en toute autre circonstance autre que mon scénario, utilisez Select , car il le dit ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X