Frage

Wie kann man den Typ (der Name als String reicht aus) eines Objekts in VB6 zur Laufzeit ermitteln?

d.h.etwas wie:

If Typeof(foobar) = "CommandButton" Then ...

/BEARBEITEN: Zur Verdeutlichung muss ich nach dynamisch typisierten Objekten suchen.Ein Beispiel:

Dim y As Object 

Set y = CreateObject("SomeType")

Debug.Print( <The type name of> y)

Wobei die Ausgabe „CommandButton“ wäre

War es hilfreich?

Lösung

Ich denke, was Sie suchen, ist TypeName und nicht TypeOf.

If TypeName(foobar) = "CommandButton" Then
   DoSomething
End If

Bearbeiten:Was meinst du mit dynamischen Objekten?Meinen Sie Objekte, die mit CreateObject ("") erstellt wurden, was noch funktionieren sollte.

Bearbeiten:

Private Sub Command1_Click()
    Dim oObject As Object
    Set oObject = CreateObject("Scripting.FileSystemObject")
    Debug.Print "Object Type: " & TypeName(oObject)
End Sub

Ausgänge

Object Type: FileSystemObject

Andere Tipps

TypeName ist das, was Sie wollen ...Hier ist eine Beispielausgabe:

VB6-Code:

Private Sub cmdCommand1_Click()
Dim a As Variant
Dim b As Variant
Dim c As Object
Dim d As Object
Dim e As Boolean

a = ""
b = 3
Set c = Me.cmdCommand1
Set d = CreateObject("Project1.Class1")
e = False

Debug.Print TypeName(a)
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
End Sub

Ergebnisse:

String
Integer
CommandButton
Class1
Boolean

Ich habe keine Kopie von VB6 zur Hand, aber ich denke, Sie brauchen die

Typename()

Funktion...Ich kann es in Excel VBA sehen, also ist es wahrscheinlich in derselben Laufzeit.Interessanterweise scheint die Hilfe darauf hinzuweisen, dass es für einen benutzerdefinierten Typ nicht funktionieren sollte, aber das ist so ziemlich die einzige Möglichkeit, die ich je hatte Tun benutze es.

Auszug aus der Hilfedatei:

TypeName-Funktion

Gibt einen String zurück, der Informationen über eine Variable bereitstellt.

Syntax

TypeName(varname)

Das erforderliche Varname-Argument ist eine Variante, die eine Variable mit Ausnahme einer Variablen eines benutzerdefinierten Typs enthält.

Dies sollte sich als schwierig erweisen, da in VB6 alle Objekte COM sind (IDispatch) Dinge.Sie sind also nur eine Schnittstelle.

TypeOf(object) is class führt wahrscheinlich nur einen COM-get_interface-Aufruf aus (ich habe den genauen Methodennamen vergessen, sorry).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top