Verwendung
Falls zur Laufzeit Code ausgeführt
werden soll, über den man sich zum Zeitpunkt
des Programmierens nicht im klaren ist, dann
kann man mithilfe der CallByName Funktion
Prozeduren oder Eigenschaften mithilfe eines Strings
Aufrufen bzw. Verändern.
Syntax
Der Syntax der Funktion ist wie folgt:
Object: Das Objekt, dessen Methode/Eigenschaft man
manipulieren möchte. Soll beispielsweise die Text Eigenschaft
eines Textfeldes mit dem Namen Text1 verändert werden,
welches sich auf dem Formular Form1 befindet, gibt man als
Objekt Form1.Text1 an.
ProcName: Name der Prozedur oder Eigenschaft die
verändert werden soll. Für das oben aufgeführte Beispiel mit
dem Textfeld muss als Prozedurname "Text" übergeben
werden.
CallType: Hier muss angegeben werden, um welchen
Aufruf Typ es sich handelt. Zur Verfügung die Typen VbGet
VbLet/VbSet sowie VbMethod. VbGet/Let/Set
werden bei Eigenschaften verwendet, VbMethod bei
Prozeduren und Funktionen. Im Beispiel oben bedeutet das,
dass man zum verändern der Text Eigenschaft VbLet angeben
muss. Will man wissen, welchen Wert die Text Eigenschaft
gerade besitzt, gibt man VbGet an. VbSet würde bei
Eigenschaften verwendet werden, die ein Objekt repräsentieren,
beispielsweise wenn man die Picture Eigenschaft einer PictureBox
verändern möchte.
Args: Hier können alle Parameter übergeben werden, die die
Eigenschaft/Prozedur erwartet. Falls die Funktion/Eigenschaft keine
Parameter akzeptiert, dann muss dieses Argument ausgelassen werden.
Man darf auch keinen leeren String ("") übergeben, weil das ebenfalls ein
Parameter wäre. Bei dem Textfeld-Beispiel müsste dieser Parameter also
ausgelassen werden. Wenn eine Funktion mehrere Parameter erwartet,
müssen diese durch Kommata getrennt werden.
Beispiele
Anmerkungen
- Man sollte keinen exzessiven Gebrauch der Funktion machen,
sie ist nämlich relativ langsam, da Visual Basic erst einmal
das/die betroffene Objekt/Funktion suchen muss.
- Es ist nicht möglich die Übergabe von Parametern zu automatisieren,
da diese durch Kommata getrennt werden müssen.
- Es ist nicht möglich Funktionen oder Objekte aufzurufen, die das Attribut
Private besitzen.
- Funktionen die in Modulen (nicht Klassenmodulen) deklariert wurden, können
nicht aufgerufen werden.
Links
MSDN CallByName Function - Allgemeine Informationen zur Funktion
MSDN Knowledge Base - Beispiel zur Verwendung von CallByName
Keywords: Visual Basic, VB 6, Eval, Call By Name, Code zur Laufzeit erstellen
Falls zur Laufzeit Code ausgeführt
werden soll, über den man sich zum Zeitpunkt
des Programmierens nicht im klaren ist, dann
kann man mithilfe der CallByName Funktion
Prozeduren oder Eigenschaften mithilfe eines Strings
Aufrufen bzw. Verändern.
Syntax
Der Syntax der Funktion ist wie folgt:
Object: Das Objekt, dessen Methode/Eigenschaft man
manipulieren möchte. Soll beispielsweise die Text Eigenschaft
eines Textfeldes mit dem Namen Text1 verändert werden,
welches sich auf dem Formular Form1 befindet, gibt man als
Objekt Form1.Text1 an.
ProcName: Name der Prozedur oder Eigenschaft die
verändert werden soll. Für das oben aufgeführte Beispiel mit
dem Textfeld muss als Prozedurname "Text" übergeben
werden.
CallType: Hier muss angegeben werden, um welchen
Aufruf Typ es sich handelt. Zur Verfügung die Typen VbGet
VbLet/VbSet sowie VbMethod. VbGet/Let/Set
werden bei Eigenschaften verwendet, VbMethod bei
Prozeduren und Funktionen. Im Beispiel oben bedeutet das,
dass man zum verändern der Text Eigenschaft VbLet angeben
muss. Will man wissen, welchen Wert die Text Eigenschaft
gerade besitzt, gibt man VbGet an. VbSet würde bei
Eigenschaften verwendet werden, die ein Objekt repräsentieren,
beispielsweise wenn man die Picture Eigenschaft einer PictureBox
verändern möchte.
Args: Hier können alle Parameter übergeben werden, die die
Eigenschaft/Prozedur erwartet. Falls die Funktion/Eigenschaft keine
Parameter akzeptiert, dann muss dieses Argument ausgelassen werden.
Man darf auch keinen leeren String ("") übergeben, weil das ebenfalls ein
Parameter wäre. Bei dem Textfeld-Beispiel müsste dieser Parameter also
ausgelassen werden. Wenn eine Funktion mehrere Parameter erwartet,
müssen diese durch Kommata getrennt werden.
Beispiele
Visual Basic-Quellcode
- '...
- 'Im Deklarationsbereich des Formulares
- Public gObject As Object
- Sub Lesen()
- 'So wird der Wert des Textfeldes gelesen
- Dim strWert As String
- strWert = CallByName(Form1.Text1, "Text", VbGet)
- End Sub
- Sub Setzen()
- 'So wird der Wert des Textfeldes gesetzt:
- CallByName Form1.Text1, "Text", VbLet, "Test"
- End Sub
- Sub ObjektSetzen()
- 'Auch Objekte können gesetzt werden:
- CallByName Me, "gObject", VbSet, Form1.Text1
- gObject.Text = "TestWert" 'Das Steuerelement Text1 hat jetzt den Wert "TestWert"
- End Sub
- Sub Aufrufen()
- 'Wenn man eine Funktion aufrufen möchte:
- Dim strWert As String
- strWert = CallByName(Me, "EinfacheFunktion", VbMethod, "Test", "Wert")
- MsgBox strWert 'Liefert "TestWert"
- End Sub
- Function EinfacheFunktion(ByVal strParameter1 As String, ByVal strParameter2 As String) As String
- EinfacheFunktion = strParameter1 & strParameter2
- End Function
Anmerkungen
- Man sollte keinen exzessiven Gebrauch der Funktion machen,
sie ist nämlich relativ langsam, da Visual Basic erst einmal
das/die betroffene Objekt/Funktion suchen muss.
- Es ist nicht möglich die Übergabe von Parametern zu automatisieren,
da diese durch Kommata getrennt werden müssen.
- Es ist nicht möglich Funktionen oder Objekte aufzurufen, die das Attribut
Private besitzen.
- Funktionen die in Modulen (nicht Klassenmodulen) deklariert wurden, können
nicht aufgerufen werden.
Links
MSDN CallByName Function - Allgemeine Informationen zur Funktion
MSDN Knowledge Base - Beispiel zur Verwendung von CallByName
Keywords: Visual Basic, VB 6, Eval, Call By Name, Code zur Laufzeit erstellen
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()