Récupération d'un nom de control [Résolu]

Signaler
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
-
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
-
Bonjour :) ,

Je viens du VBA et le VB me semlbe encore assez obscure, surtout sans msdn...

Sous access on peut appeler un control de plusieurs façon:
NomCtrl ou Me.NomCtrl ou Me("NomCtrl")

Apparemment, la dernière solution n'est pas possible de le faire en VB et c'est justement ce dont j'ai besoin :sad)

En effet, j'aimerais mettre le nom d'un control (sur lequel on a cliqué par exemple) dans une variable string ou autre afin de pouvoir m'en servir pour faire des comparaisons, du genre
if Me(NomCtrl).visible = true ...

Mais comment faire pour appeler Me.NomCltr(Index) en mettant le nom du control en paramètre? comme dans Me(Nomctrl)

Merci pour votre aide ;)
TBBUIM

8 réponses

Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
7
Salut ;O)

En effet, VB est moins souple de ce point de vue là (et pas seulement celui-là) par rapport à son petit frère VBA.

Pour arriver à tes fins, il faudra utiliser la collection Controls du formulaire en cours. Exemple :

Pour savoir si un bouton de commande nommé "Command2" est visible ou pas on ferait ceci :

Dim MyCtrl As String

MyCtrl = "Command2"

MsgBox Me.Controls(MyCtrl).Visible

J'espère que cela répond à ta question.

Guy
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
9
Tout à fait 8-)
Merci
TBBUIM
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011

T'as la solution de passé par une variable controle du genre :

Dim X as control

set X=command2

if X.visible=true

end if
set X= command3

if X.name= "toto"

end if
.....

set X=Nothing
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
7
crn_c21 > ta solution n'est pas mauvaise mais celle-ci a l'inconvénient de devoir instancier un nouvel objet à chaque fois.
Tandis que ma solution utilise la collection Controls du formulaire, donc je fais directement référence aux controls par leur nom sans passer par un nouvel objet.

Guy
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011

Merci Neo

mais peux tu me dire quel sont les inconvénient de ma solution?

en terme de coût par exemple!

merci
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
7
Simplement d'un point de vue optimisation de la mémoire.
Chacun fera comme il l'entend. Mais dans mes projets, j'essaye toujours d'utiliser la mémoire au mieux en sachant que VB est un piètre économe de ce point de vue là.

Mais bien entendu ta façon de faire fonctionnera. Je n'en disconviens pas. Disons que me code est "light" par rapport au tiens.

Guy
Messages postés
302
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
4 février 2011

Attend je ne critique en aucune manière ta solution
Bien au contraire!
Je voulais juste ton comprendre pkoi ma solution était plus "couteuse"
Ce que je ne comprend pas c pkoi tu dis que ma soultion instance un nouvel objet a chaque fois
Pour moi je n'instance qu'un objet ki pointe sur des controles différents!
Je me trompe?
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
7
Je sais que tu ne critiques pas.
La question est celle-ci : pkoi utiliser une nouvelle variable alors qu'il est possible de pointer directement sur le controle voulu via la collection Controls ?

Guy