Avoir un objet de type controle en sortie de fonction

[Résolu]
Signaler
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 octobre 2006
-
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 octobre 2006
-
Bonjour,

Voila j'ai un fonction comme ca:

Function GetControlFromName( ControlName as String) as Control

dim cControl as Control

For Each cControl in Form1.Controls
If CStr(cControl.Name) = ControlName Then
GetControlFromName = cControl
End If
Next cControl

End Function

Bien evidement cela ne marche pas, sinon je serais pas ici
L'appel de cette fonction donne une erreur car on essai d'attribuer la valeur
par defaut du cControl (le .Text d'un textBox, par exemple) a une variable de
type inadapté.
Quelqu'un sait comment on peut faire pour passer le controle en entier à cette
variable ?

5 réponses

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Pour tous les objets, il faut utiliser SET et un control est un objet.

Cordialement, CanisLupus
3
Merci

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

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

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
Ben tout dépend de quel type de control il te renvoie : c'est sûr que
si tu essaie de modifier la propriété Text d'un commandButton par
exemple, il va te signaler une erreur ! A ce moment là :



Dim oControl as Control



On Error Resume Next



Set oControl = GetControlFromName("Command1")

Let oControl.Text = "Salut !" ' ca ne provoque pas d'erreur mais ca ne modifie pas la propriété Text !


DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
Salut,

Essaie un truc dans ce genre-là :

Private Sub Form_Load()
Dim c As Control


Set c = GetControlFromName("Command1")
MsgBox c.Caption


End Sub


Function GetControlFromName(ControlName As String) As Control


Dim cControl As Control


For Each cControl In Form1.Controls
If CStr(cControl.Name) = ControlName Then
Set GetControlFromName = cControl
End If
Next cControl


End Function

Cordialement, CanisLupus
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 octobre 2006

Pour Darksidious

Bien evidement que ton Let oControl.Text="Salut !" marche puisque il y a le On Error Resume Next ...
Mais moi ca m'interesse pas de "passer" sur cette erreur.

Pour CanisLupus

Merci !!!
Peut tu m'expliquer pourquoi le Set est, dans ce cas la, obligatoire ? On passe pas par référence par defaut en déclarant les types ?
Messages postés
13
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 octobre 2006

Ok, c'était la premiere fois que je m'attaquais a ce genre de morceau, je le saurai désormais.
Thx !