Site:  Cours VB.net  
3.12 Avoir le Focus.

Nous allons étudier comment un objet de l'interface devient 'actif'.

Lorsqu'une fenêtre ou un contrôle est actif on dit qu'il a le focus.

Un contrôle qui a le focus est celui qui reçoit les évènements clavier, souris..

Si une fenêtre prend le focus, sa barre de titre en haut prend la couleur active, si c'est un contrôle texte, le curseur apparaît dedans.

 

Comment donner le focus à une fenêtre ?

Si une fenêtre est visible la méthode Activate lui donne le focus.

Form1.Activate()

Dans ce cas l'évènement Form1_Activated survient.

La méthode Desactivate est déclenché quand la fenêtre perd le focus.

 

Comment donner le focus à un contrôle ?

Avec la méthode Focus

TxtNom.Focus()

Avec la méthode Select:

TxtNom.Select()     'donne le focus à la zone de texte Txnom et met le curseur dedans.

On peut la surcharger et en plus sélectionner une portion du texte:

TxtNom.Select(2,3)    'donne le focus et sélectionne 3 caractères à partir du second.  

 ou forcer à ne rien sélectionner (second argument à 0).

 

On peut interdire a un contrôle le focus en donnant la valeur False à sa propriété CanFocus.

Aussi avant de donner le focus il est préférable de vérifier s'il peut le prendre:

If TxtNom.CanFocus then

    TxtNom.Focus()

End If

L'évènement GotFocus se produit quand le contrôle prend le focus.

Private Sub TxtNom_GotFocus..

End Sub

 

 

Cascade d'évènement quand on prend ou on perd le focus:

Il se déclenche dans l'ordre:

 

Enter           

Se produit quand l'utilisateur entre dans le contrôle.

GotFocus   

Se produit quand le contrôle prend le focus.

Leave   

Se produit quand le focus quitte le contrôle.

Validating

Se produit lorsque le contrôle est en cours de validation.

On va quitter le contrôle, il faut vérifier la validité avant. La validation c'est vous qui devez la faire!!!

Pour un bouton, par exemple, se produit lorsque l'on quitte le bouton, cela permet de contrôler la validité de certaines données et si nécessaire d'interdire de quitter le contrôle si certaines conditions ne sont pas remplies:

Exemple: ne pas quitter une textbox si l'utilisateur n'a rien tapé:

 

Private Sub TextBox1_Validating ((ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

If   TextBox1.Text=""  then

    e.Cancel = True    'Annuler la perte du focus: le focus reste sur TextBox11

End If

End Sub

 

Validated

Se produit lorsque le contrôle à terminé sa validation

LostFocus

 

L'évènement LostFocus se produit quand le contrôle perd le focus, mais attention:

Lorsque vous changez le focus à l'aide du clavier (TAB, MAJ+TAB, etc.), en appelant les méthodes Select ou SelectNextControl, ou en définissant la propriété ContainerControl.ActiveControl au formulaire actuel, les événements Focus se produisent dans l'ordre suivant :

  1. Enter
  2. GotFocus
  3. Leave
  4. Validating
  5. Validated
  6. LostFocus 

 

Lorsque vous changez le focus avec la souris ou par l'appel à la méthode Focus, des événements Focus se produisent dans l'ordre suivant :

  1. Enter
  2. GotFocus
  3. LostFocus
  4. Leave
  5. Validating
  6. Validated

 

Dans Validating, si la propriété Cancel du CancelEventArgs prend la valeur true , tous les événements qui se produiraient normalement après l'événement Validating sont supprimés.

 

Si la propriété CauseValidating du contrôle a la valeur false, les événements Validating et Validated sont supprimés.

Les événements Enter et Leave sont supprimés dans les formulaire (fenêtres) Les événements équivalents dans la classe Form sont les événements Activated et Desactivate.

 

Certains contrôles ne peuvent pas avoir le focus, comme les labels par exemple.

 

Usage du clavier pour passer d'un contrôle à l'autre. la touche 'TAB'.

 

Dans une application où un utilisateur tape beaucoup de données dans de multiples contrôles, il passe souvent d'un contrôle (TextBox par exemple) au suivant avec la touche TAB.

 

|

 

Comment permettre cela? Chaque contrôle à une propriété TabIndex qui s'incrémente automatiquement de 0 à 1, 2, 3...quand en cours de conception on ajoute des contrôles sur une fenêtre.

Lorsque l'utilisateur appuie sur TAB, le focus passe au contrôle qui a le TabIndex immédiatement supérieur.

On peut modifier le TabIndex des contrôles pour modifier l'ordre de tabulation.

Quand TabStop a la propriété False (au niveau d'un contrôle) celui ci est exclu de l'ordre de tabulation et le focus ne s'arrête pas.

A partir de VB 2005 on peut très rapidement modifier l'ordre de tabulation:

Passer par le menu Affichage-> Ordre de tabulation.

En mode design apparaît sur chaque contrôle un carré avec le numéro du TabIndex; il suffit de cliquer successivement sur chaque carré dans l'ordre des tabulations croissantes pour mettre les tabulations dans le bon ordre.

Il faut pour finir repasser par le menu Affichage-> Ordre de tabulation.

 

Raccourcis clavier.

Dans beaucoup d'applications certains contrôles ont un raccourci clavier:

Exemple:  Nouveau est une ligne de menu.  N étant souligné, ALT-N ouvre le menu et met le focus sur la ligne  'Nouveau' du menu.

Comment faire cela: Dans la propriété Text du contrôle, quand on tape le texte en mode conception, il faut mettre un '&' avant la lettre qui servira de raccourci clavier.

'&Nouveau' dans notre exemple affiche  bien Nouveau.

Pour les menus, c'est bien ALT-N qui ouvrira le menu.

Pour les boutons:

En VB 2003 et 2005:

Si on y inclut un « & » la lettre qui suit sera soulignée et servira de raccourci clavier. 

Button.Text= "&Ok"  affiche sur le bouton  Ok   et crée le raccourci clavier 'Ctrl O' qui est l'équivalent d'un click sur le bouton.

En VB 2008, il faut que la propriété UseMnemonic du bouton ai la valeur True pour pouvoir utiliser le raccourci clavier et le raccourci, pour "&Ok", est dans ce cas 'O' ou 'Alt O'.

 

Pour une TextBox, la propriété text ne peut pas être utilisée, aussi il faut mettre devant la textBox un contrôle label (qui lui ne peut pas avoir le focus), si les TabIndex du label et du TextBox se suivent, le fait de faire le raccourci clavier du label donne le focus au TextBox.

Nom

|

Exemple quand l'utilisateur tape Alt-N, le focus va dans le TextBox dessous.