web-dev-qa-db-fra.com

Comment définir le focus sur un contrôle dans une application Windows Forms?

Dans une application Windows Forms, quand puis-je écrire le code pour définir le focus sur un contrôle à la fois pendant le lancement de l'application et par la suite après avoir appelé une fonction?

Par exemple, si j'ai un DropDownList, un TextBox et quatre boutons et que je veux que le Focus soit défini sur le DropDownList, dois-je écrire mon code?

Pour définir le focus sur un contrôle particulier au lancement de l'application, je peux définir l'index de tabulation sur ce DropDown (avec une valeur minimale, sous l'hypothèse que la propriété TabStop est définie sur True).

Maintenant, si l'utilisateur termine une opération (par exemple, l'un des événements Click Button), puis je mets à jour DropDown et ensuite si je veux définir le focus ... je peux le faire comme

MyDropDownList.Focus()

QUESTION

NB: La question est plus sur , pas comment?

27
Kanini

La solution de loin la plus simple consiste à définir correctement la propriété TabIndex afin que votre contrôle "MyDropDownList" ait l'index le plus bas. La prochaine approche consiste à le faire dans le constructeur. Mais vous devez utiliser Select (), la méthode Focus () ne peut pas encore fonctionner car le contrôle ne devient visible que plus tard.

Public Sub New()
    InitializeComponent()
    MyDropDownList.Select()
End Sub

Fonctionne également dans l'événement Load. Focus () commence à fonctionner dans l'événement Shown.

59
Hans Passant

Lorsque la fenêtre parent est activée (c'est-à-dire lorsqu'elle reçoit l'événement "Activated"), définissez le focus sur le contrôle enfant où vous souhaitez que le focus se trouve.

private void Form_AddAppID_Activated(object sender, EventArgs e)
{
    textID.Focus();
}

Notez que l'ordre de tabulation n'a rien à voir avec le début du focus. Au lieu de cela, l'ordre de tabulation est utilisé pour décider comment le focus est transféré lorsque l'utilisateur appuie sur la touche de tabulation.

0
Paul Yao