CallByName en VB.NET ? [Résolu]

us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 00:02 - Dernière réponse : Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention
- 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...

Amicalement,
Us.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 12 sept. 2008 à 10:46
1
Merci
Public Function CallByName( _
ByVal ObjectRef As System.Object, _
ByVal ProcName As String, _
ByVal UseCallType As CallType, _
ByVal Args() As Object _
) As Object



Requirements





Namespace: [ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.en/dv_vbalr/html/f5e82c6e-3500-452b-bdb8-78f0d5477604.htm Microsoft.VisualBasic]



Module: Interaction



Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)














Bonjour chez vous !

Merci gillardg 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de gillardg
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 12:32
0
Merci
Bonjour,

Merci de nouveau.

J'ai trouvé 2 façons de faire :

Microsoft.VisualBasic.CallByName()
Microsoft.VisualBasic.Interaction.CallByName()

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...)

Amicalement,
US.
Commenter la réponse de us_30
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 12 sept. 2008 à 13:06
0
Merci
il y a moyen vas voir ma source http://www.vbfrance.com/codes/AGENDA-TOUT-SIMPLE-NO-DATABASE_47574.aspx

ou j'indexe 12 textbox

Bonjour chez vous !
Commenter la réponse de gillardg
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 16:46
0
Merci
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.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 16:48
0
Merci
Oupsss... Lire : "... C'est toute même moins lourd..."

Amicalement,
Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 16:50
0
Merci
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...

Amicalement,
Us.
Commenter la réponse de us_30
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 12 sept. 2008 à 17:26
0
Merci
ben attends vb10 ils ne pouvaient pas tout changer d'un coup sinon c'était impossible de faire un convertisseur vb6=>vb.net

Bonjour chez vous !
Commenter la réponse de gillardg
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 sept. 2008 à 17:31
0
Merci
lol...

Amicalement,
Us.
Commenter la réponse de us_30
Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention - 13 sept. 2008 à 07:54
0
Merci
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()
Commenter la réponse de Kristof_Koder
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 13 sept. 2008 à 10:42
0
Merci
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.

Amicalement,
Us.
Commenter la réponse de us_30
Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention - 15 sept. 2008 à 19:58
0
Merci
Voici un exemple issu de MSDN et présentant l'appel à une méthode :

Public Class A
Public Overridable Function method() As Integer
Return 0
End Function
End Class

Public Class B
Public Overridable Function method() As Integer
Return 1
End Function
End Class

Class Mymethodinfo

Public Shared Function Main() As Integer
Console.WriteLine("Reflection.MethodInfo")
Console.WriteLine()
Dim MyA As New A()
Dim MyB As New B()

'Get the Type and MethodInfo
Dim MyTypea As Type = Type.GetType("A")
Dim Mymethodinfoa As MethodInfo = MyTypea.GetMethod("method")

Dim MyTypeb As Type = Type.GetType("B")
Dim Mymethodinfob As MethodInfo = MyTypeb.GetMethod("method")

'Get and display the Invoke method
Console.WriteLine("First method - {0} returns {1}", MyTypea.FullName, _
Mymethodinfoa.Invoke(MyA, Nothing).ToString())
Console.WriteLine("Second method - {0} returns {1}", MyTypeb.FullName, _
Mymethodinfob.Invoke(MyB, Nothing).ToString())
Return 0
End Function
End Class
Commenter la réponse de Kristof_Koder
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 16 sept. 2008 à 20:55
0
Merci
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...

Amicalement,
Us.
Commenter la réponse de us_30
Kristof_Koder 920 Messages postés vendredi 3 août 2007Date d'inscription 27 octobre 2008 Dernière intervention - 16 sept. 2008 à 23:06
0
Merci
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 !
Commenter la réponse de Kristof_Koder

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.