us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 2016
-
12 sept. 2008 à 00:02
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 2008
-
16 sept. 2008 à 23:06
Bonsoir,
Dans un projet sous VB6/VBA, j'utilisais l'instruction "CallByName"... Je tente de transporter cette instruction sous VB2008, mais je ne connais pas son équivalent... Avez-vous une idée ?
Merci, pour toute l'aide que vous pourriez m'apporter...
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 12 sept. 2008 à 10:46
Public Function CallByName( _
ByVal ObjectRef As System.Object, _
ByVal ProcName As String, _
ByVal UseCallType As CallType, _
ByVal Args() As Object _
) As Object
qui fonctionne donc, même sans la référence Microsoft.visualBasic cochée.
Bien sur, le fait d'écrire : "Microsoft.VisualBasic." fait, en réalité une référence implicite à VB6... (en qlq sorte)
Par conséquent, ce n'est pas du VB.NET natif !
Hors, c'est ce que je recherche... Ici, c'est plus une astuce, qu'autre chose...
Je me sert de CallByName, car visiblement VB2008 ne possède pas de collection d'objet pour les Label, TextBox, etc... Comme sous VB6, où cela est très simple d'utilisation... avec : Label(0), Label(1), etc...
IL y a-t-il une solution pour indexer les Label, ou autres cntrôles ?
(Cette question pourrait faire l'objet d'un nouveau post, j'en suis conscient...)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 12 sept. 2008 à 16:46
Salut,
OKay, vu l'astuce que tu utilises :
Dim tb() As TextBox = {TextBox0, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12}
For x = 0 To 12
tb(x).text = String.Empty
Next
=
JE viens de me pencher dessus, et comme c'est déjà un problème que j'avais rencontré dans VBA (il n'y a pas de collection, non plus) j'avais fait une petite propriété bien pratique, d'ailleurs en Snippets : http://www.codyx.org/snippet_donner-valeur-dans-ensemble-meme-type-controle_528.aspx que j'ai adapté pour VB2008... Voici ce que cela donne :
Dans un module :
=
Public Property TypeControl(ByVal oObjet As Object, ByVal NameControl As String, ByVal NamePropriete As String)
' DONNE UNE VALEUR A UNE PROPRIETE A L'ENSEMBLE D'UN TYPE DE CONTROLE
Set(ByVal value)
Dim cTypeControl As Control
For Each cTypeControl In oObjet.Controls
If cTypeControl.GetType.Name = NameControl Then
Microsoft.VisualBasic.CallByName(cTypeControl, NamePropriete, Microsoft.VisualBasic.CallType.Let, value)
End If
Next
End Set
Get
Return Nothing
End Get
End Property
=
Puis, on appelle ainsi : (exemple)
TypeControl(GroupBox1, "Textbox", "text") "dede"
> ainsi tous les Textbox se trouvant dans Groupbox1 auront le texte "dede".
C'est toute même lourd, que de citer tous les noms des contrôles...
(J'y metterai peut-être une petite source exemple, le temps d'avoir des critiques, puis en snippets... Enfin, si tu vois mieux ? n'hésite pas...)
Amicalement,
Us.
Vous n’avez pas trouvé la réponse que vous recherchez ?
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 12 sept. 2008 à 16:50
Pour continuer, la fonction CTYPE est presque un équivalent à CALLBYNAME... mais en moins pratique... CallByName reste vraiment plus puissante... Il me semble, que rien remplace vraiment CallByName en VB.NET...
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 13 sept. 2008 à 07:54
Quitte à faire du .NET, faisons-en jusqu'au bout !
Il existe l'espace de nom System.Reflection dans le framework .NET
Avec les clases qu'il contient, il remplace plus qu'avantageusement ce bon vieux CallByName()
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 13 sept. 2008 à 10:42
Bonjour,
Je ne vois pas bien comment faire pour obtenir l'équivalent de CallByName ?
System.Reflection étant un peu court comme explication. Le nombre de surcharge étant plétorique, je n'y perds... et l'aide en ligne, ben, c'est franchement pas ça... Peux-tu préciser ? SVP.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 16 sept. 2008 à 20:55
Bonsoir,
Très cher, je ne vois pas bien en quoi l'appel à une methode, m'aide pour faire l'équivalent de CallByName ?
dsl, même si je suis un peu l'entêtrise de service, sur ce coup...
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 16 sept. 2008 à 23:06
Ben c'est exactement ce que fait l'exempel que je t'ai refilé !
Il appelle les méthodes nommées Method() d'instances des classes A et B à partir de chaines de caractères : Une contenant "A", l'autre "B" et la dernière "method". si ce n'est pas l'équivalent de CallByName() ... je ne sait pas ce que c'est ! C'est juste que c'est bcp plus puissant, donc cela parait plus complexe, mais il n'en est rien !