Si vous souhaitez savoir si un objet est d'un type spécial, écrivez le code suivant :
Si TypeOf obj est ListItem Alors...
Si vous souhaitez obtenir le nom d'un type d'objet, utilisez :
MsgBox "L'élément est un " & TypeName(obj)
Contrôler les longues bouclesLorsque le programme est bloqué dans une longue boucle, vous ne pouvez cliquer sur aucun bouton ou touche de commande. C'est très difficile à contrôler pour les utilisateurs. Peut-être que l'utilisateur ne souhaite plus exécuter la boucle et quitte en cliquant sur le bouton Annuler ? Comment résoudre ce problème ? La réponse est : utilisez la commande DoEvents ! Autrement dit, exécutez la commande DoEvents au début de la boucle, comme le code suivant :
Diminuez-moi aussi longtemps
Pour i = 1 à 1 000 000
Faire des événements
...
Ensuite, je
En fait, la commande DoEvents n'a pas besoin d'être placée sur la ligne 1, elle peut être placée n'importe où dans la boucle. En faisant cela, d'autres parties du programme, comme un bouton de commande qui termine la boucle, auront une autre chance d'accepter les événements de clic.
Rendre les longues boucles plus rapidesJ'ai trouvé qu'en général, il est préférable d'utiliser la fonction API GetInputState pour vérifier la valeur de la file d'attente d'entrée du programme. Je ne sais pas pourquoi l'instruction If accélère l'exécution du code, mais cela fonctionne très bien.
Par conséquent, la ligne de code suivante peut être
Faire des événements
Remplacer par
Si GetInputState() Alors DoEvents
Essayez-le !
En fait, la raison en est la suivante : l'instruction DoEvents permet à n'importe quelle application d'effectuer des événements associés, pas seulement votre propre programme. Après avoir ajouté le jugement GetInputState, vous ne pouvez accepter que les actions événementielles de votre propre programme !
Facilitez la sélection des casRegardons l'exemple suivant : construire une chaîne à partir de l'utilisateur cliquant sur différentes combinaisons de balises :
lbl(0) = "Bonjour"
lbl(1) = "Je commente : m "
lbl(2) = "Heureux"
lbl(3) = "Triste"
...
sub lbl_click (index sous forme d'entier)
chaîne$ = chaîne$+lbl(index).caption
Ensuite, vous devez écrire une série d'instructions select case pour analyser cette chaîne...
sélectionner la chaîne de casse$
cas "Bonjour je commente : m Heureux"
faire quelque chose
cas "Bonjour je commente : m"
ce serait une erreur...
cas d'autre
faire autre chose
fin de la sélection
Comme vous pouvez le constater, cela serait très complexe, surtout s'il existe de nombreuses balises et que des contrôles de légalité pour les opérations de fusion sont nécessaires.
Pour résoudre ce problème, j'ai créé un tableau de même longueur que le nombre de balises :
arraylbl(n) sous forme d'entier
La valeur de départ du tableau est 1, puis la valeur de chaque élément est égale à la valeur précédente multipliée par 2 (valeur*2), comme ceci : 1 2 4 8 16 32 64... De cette façon, le la combinaison de chaque paire d'étiquettes donnera une autre valeur unique"
lbl(0) + lbl(1) = 1 + 2 = 3
lbl(0) + lbl(1) + lbl(4) = 1 + 2 + 16 = 19
Désormais, lorsque l'on clique sur une étiquette, sa valeur lblarray() correspondante est ajoutée à la variable. De cette façon, sur la base de quelques chiffres, vous pouvez simplement écrire une instruction select case :
sélectionnez le cas IsLegal
cas 3
Remarque : la chaîne était valide
appeler des marchandises
cas 19
Remarque : la chaîne était valide
appeler des marchandises
cas d'autre
Remarque : invalide
n'appelle pas bien
fin de la sélection
Haha, parfois, la numérisation de personnages peut avoir des effets étonnamment positifs !