Valider les données de contrôle en limitant le focus
L'événement Validate et la propriété CausesValidation sont utilisés en tandem pour confirmer la saisie d'un contrôle avant de permettre à l'utilisateur de détourner le focus du contrôle. Par exemple : considérons une application avec plusieurs zones de texte et un bouton Aide. Lorsque chaque zone de texte reçoit le focus, vous souhaitez empêcher l'utilisateur de déplacer le focus jusqu'à ce que les critères de validation spéciaux de la zone de texte soient remplis. Cependant, vous souhaitez également autoriser le focus. l'utilisateur peut déplacer le focus lorsque la zone de texte reçoit le focus. Le bouton Aide peut être cliqué à tout moment. Pour ce faire, définissez les critères de validation dans l'événement Validate et définissez la propriété CausesValidation du bouton Aide sur False. Si la propriété est définie sur True (paramètre par défaut), l'événement Validate se produira sur le premier contrôle. Si la propriété est définie sur False, l'événement Validate sur le premier contrôle se produira en premier.
L'événement Validate est plus adapté à la validation des entrées de données que l'événement LostFocus car l'événement LostFocus (par définition) se produit après le déplacement du focus. Au lieu de cela, en utilisant l'événement Validate, vous pouvez empêcher le focus de passer à un autre contrôle jusqu'à ce que les règles de validation soient respectées.
utilisations possibles
Les applications de saisie de données doivent effectuer une validation de saisie de données plus complexe que la validation fournie par le contrôle MaskedEdit ou qui se produit dans les règles métier.
Le formulaire doit empêcher l'utilisateur d'utiliser la touche TAB ou les touches accélératrices pour déplacer les contrôles jusqu'à ce que les données aient été saisies dans le champ.
Les documents ActiveX exécutés dans Internet Explorer nécessitent un moyen permettant à l'utilisateur de terminer son travail sur le formulaire avant que le script ne déplace le focus par programme.
Contrôle focus sur l'événement Valider
L'événement Validate inclut un paramètre keepfocus. Lorsque le paramètre est défini sur True, le contrôle conserve le focus. Cela empêche efficacement l'utilisateur de cliquer sur d'autres contrôles.
Utiliser un ensemble de contrôles
Un tableau de contrôles est un groupe de contrôles ayant un nom et un type communs. Leur déroulement est également le même. Un tableau de contrôles doit avoir au moins un élément, et le nombre d'éléments peut être augmenté dans la limite autorisée par les ressources système et la mémoire. La taille du tableau dépend également de la mémoire et des ressources Windows requises par chaque contrôle ; La valeur d'index maximale disponible dans le tableau de contrôle est 32767. Les éléments du même tableau de contrôles ont leurs propres paramètres de propriété. Les utilisations courantes des tableaux de contrôle incluent l’implémentation de contrôles de menu et de regroupements de boutons d’option.
Notez que Visual Basic inclut la possibilité d'ajouter dynamiquement des contrôles non référencés à la collection Controls au moment de l'exécution. Cette rubrique fait uniquement référence aux contrôles de référence ajoutés au moment du design en coupant et en collant un contrôle sur un formulaire. Pour plus d’informations sur l’ajout de contrôles au moment de l’exécution, consultez les rubriques de référence « Ajouter une méthode (collection de contrôles) » et « Ajouter une méthode (collection de licences) ».
Pourquoi utiliser des tableaux de contrôle
Au moment de la conception, l’ajout de contrôles à l’aide d’un tableau de contrôles consomme moins de ressources que l’ajout de plusieurs contrôles du même type directement au formulaire. Les tableaux de contrôles sont également utiles lorsque vous souhaitez que plusieurs contrôles partagent du code. Par exemple, si vous créez un tableau de contrôles contenant trois boutons d'option, le même code sera exécuté quel que soit le bouton sur lequel vous cliquez.
Pour créer une nouvelle instance d'un contrôle au moment de l'exécution, le nouveau contrôle doit être membre du tableau de contrôles. Lors de l'utilisation d'un tableau de contrôles, chaque nouveau membre hérite des procédures d'événements publics du tableau.
Il n'est pas possible de créer de nouveaux contrôles au moment de l'exécution à l'aide du mécanisme de tableau de contrôles, car chaque nouveau contrôle hérite de la procédure événementielle écrite pour le tableau. Par exemple, si vous disposez de plusieurs zones de texte sur votre formulaire et que chaque zone de texte accepte une valeur de date, vous pouvez créer un tableau de contrôles afin que toutes les zones de texte partagent le même code de validation.
Exemple d'application : Calc.vbp
L'exemple d'application Calculatrice illustré à la figure 7.2 (répertorié dans le répertoire Samples!Alink(vbsamples)) contient deux tableaux de contrôles : des boutons numériques et des boutons d'action.
Remarquez comment l'exemple utilise la syntaxe objet (index) pour référencer chaque contrôle. Spécifiez la valeur de l'index lors de la création du contrôle. En fait, spécifier un index arbitraire pour un contrôle au moment de la conception fera du contrôle une partie d'un tableau.
La propriété Index distingue les éléments du tableau de contrôles. Lorsqu'un contrôle du tableau reconnaît un événement, Visual Basic appelle la procédure d'événement public et transmet un paramètre (la valeur de la propriété Index) pour identifier le contrôle qui a reconnu l'événement.
Par exemple, la première ligne de code de la procédure événementielle Number_Click ressemble à ceci :
PRivateSubNumber_Click (IndexAsInteger)
Si Number(0) identifie l'événement, VisualBasic transmet 0 comme paramètre d'index, et si Number(1) identifie l'événement, VisualBasic transmet 1 comme paramètre d'index. Contrairement à la valeur d'index, le reste du code Number_Click qui a été exécuté est le même pour Number(0) à Number(9).
Créer un tableau de contrôle au moment de la conception
Il existe trois manières de créer des tableaux de contrôles au moment de la conception :
1. Donnez le même nom à plusieurs contrôles.
2. Copiez le contrôle existant et collez-le sur le formulaire.
3. Définissez la propriété Index du contrôle sur une valeur non Null.
Notez que le tableau de contrôle de menu doit être créé dans l'éditeur de menu. Pour plus d'informations sur cette opération, consultez « Création et modification de menus au moment de l'exécution » au chapitre 6, « Création de l'interface utilisateur ».
Pour ajouter un élément de tableau de contrôles en modifiant le nom du contrôle :
1. Dessinez le contrôle à ajouter dans le tableau de contrôles (doit être du même type de contrôle) pour déterminer quel contrôle sera le premier élément du tableau.
2. Sélectionnez le contrôle et modifiez sa valeur de paramètre Nom par la valeur de paramètre Nom du premier élément du tableau.
3. Lorsque vous entrez un nom existant pour un contrôle dans le tableau, Visual Basic affiche une boîte de dialogue vous demandant de confirmer si vous souhaitez créer le tableau de contrôles. À ce stade, sélectionnez « OK » pour confirmer l'opération.
Par exemple, si le premier élément du tableau de contrôles est nommé cmdCtlArr, sélectionnez un CommandButton, ajoutez-le au tableau et définissez son nom sur cmdCtlArr. À ce moment, le message suivant s'affichera : "Un contrôle nommé 'cmdCtlArr'. existe déjà . Voulez-vous créer un tableau de contrôles ? » Sélectionnez OK pour confirmer l'opération.
Les contrôles ajoutés de cette manière partagent uniquement la propriété Name et le type de contrôle ; les autres propriétés ont les mêmes valeurs que lorsque le contrôle a été initialement dessiné.
Pour ajouter un élément de tableau de contrôles en copiant un contrôle existant :
1. Dessinez les contrôles dans le tableau de contrôles.
2. Lorsque le contrôle obtient le focus, sélectionnez la commande "Copier" dans le menu "Edition".
3. Dans le menu "Edition", sélectionnez la commande "Coller". Visual Basic affichera une boîte de dialogue vous demandant s'il faut confirmer la création du tableau de contrôles. Sélectionnez OK pour confirmer l'opération. La valeur d'index attribuée au contrôle est 1. Le premier contrôle dessiné a la valeur d'index 0.
La valeur d'index de chaque nouvel élément du tableau est la même que l'ordre dans lequel il a été ajouté au tableau de contrôle. Lorsque vous ajoutez un contrôle comme celui-ci, la plupart des propriétés visuelles, telles que la hauteur, la largeur et la couleur, sont copiées du premier contrôle du tableau vers le nouveau contrôle.
Ajouter un tableau de contrôle au moment de l'exécution
Au moment de l'exécution, vous pouvez utiliser les instructions Load et Unload pour ajouter et supprimer des contrôles du tableau de contrôles. Toutefois, le contrôle ajouté doit être un élément d'un tableau de contrôles existant. Vous devez créer un contrôle avec (dans la plupart des cas) une propriété Index de 0 au moment du design, puis utiliser la syntaxe suivante au moment de l'exécution :
Lors du chargement d'un nouvel élément d'un tableau de contrôles, la plupart des paramètres de propriété seront copiés à partir de l'élément existant du tableau avec le plus petit indice, dans ce cas, l'élément d'index 0. Étant donné que les paramètres des propriétés Visible, Index et TabIndex ne sont pas automatiquement copiés vers les nouveaux éléments du tableau de contrôles, afin de rendre visible le contrôle nouvellement ajouté, sa propriété Visible doit être définie sur True.
Notez que Visual Basic générera une erreur lors de la tentative d'utilisation de l'instruction Load sur une valeur d'index qui existe déjà dans le tableau.
Le point important est que l'instruction Unload peut être utilisée pour supprimer tous les contrôles créés par l'instruction Load. Cependant, Unload ne peut pas supprimer les contrôles créés au moment du design, qu'ils fassent ou non partie du tableau de contrôles.
Schéma de contrôle : ajout et suppression de contrôles dans le tableau de contrôles
La manière d’ajouter et de supprimer des contrôles au moment de l’exécution est illustrée dans l’exemple du tableau de contrôles, où le contrôle est un bouton d’option. Selon cet exemple, l'utilisateur peut ajouter des boutons d'option pour modifier la couleur d'arrière-plan de la zone d'image.
Comme le montre la figure 7.3, démarrez le formulaire, puis dessinez dessus une zone d'image, une étiquette, deux boutons d'option et trois boutons de commande.
Événements d’application de baie de contrôle
Ensuite, vous devez ajouter des procédures événementielles pour le bouton d'option et le bouton de commande. Démarrez l'application après avoir ajouté la déclaration du formulaire :
DimMaxIdAsInteger
Tous les boutons d'option partagent la procédure événementielle Click :
PrivateSuboptButton_Click (IndexAsInteger)
picDisplay.BackColor = QBColor (Index 1)
EndSub
Ajoutez un nouveau bouton d'option via la procédure événementielle Click du bouton de commande "Ajouter". Dans cet exemple, avant d'exécuter l'instruction Load, le code vérifie que pas plus de dix cases d'option sont chargées. Une fois le contrôle chargé, sa propriété Visible doit être définie sur True.
PrivateSubcmdAdd_Click()
IfMaxId=0ThenMaxId=1 'Définit tous les boutons d'option.
IfMaxId>8ThenExitSub 'Seuls dix boutons sont autorisés.
MaxId=MaxId 1 'Le nombre de boutons augmente.
LoadoptButton(MaxId) 'Créez un nouveau bouton.
optButton(0).SetFocus 'Réinitialiser les options du bouton.
'Placez le nouveau bouton sous le bouton précédent.
optButton(MaxId).Top=optButton(MaxId-1)._
Top 400
optButton(MaxId).Visible=True 'Afficher le nouveau bouton.
optButton(MaxId).Caption=Option&MaxId 1
EndSub
Supprimez une case d'option via la procédure événementielle Click du bouton de commande Supprimer :
PrivateSubcmdDelete_Click()
IfMaxId<=1ThenExitSub 'Conserve les deux premiers boutons.
UnloadoptButton(MaxId) 'Supprimez le dernier bouton.
MaxId=MaxId-1 'Le nombre de boutons diminue.
optButton(0).SetFocus 'Réinitialiser les options du bouton.
EndSub
Terminez l'application via la procédure événementielle Click du bouton Fermer :
PrivateSubcmdClose_Click()
Décharge-moi
EndSub
->