Domanda
Come si può ottenere il Tipo (è sufficiente il nome come stringa) di un Oggetto in VB6 in fase di runtime?
cioè.qualcosa di simile a:
If Typeof(foobar) = "CommandButton" Then ...
/MODIFICARE: per chiarire, devo controllare gli oggetti tipizzati dinamicamente.Un esempio:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Dove l'output sarebbe "CommandButton"
Soluzione
Penso che quello che stai cercando sia TypeName anziché TypeOf.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
Modificare:Cosa intendi per oggetti dinamici?Intendi oggetti creati con createObject (""), perché dovrebbe ancora funzionare.
Modificare:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
Uscite
Object Type: FileSystemObject
Altri suggerimenti
TypeName è quello che vuoi...Ecco alcuni esempi di output:
Codice VB6:
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
Risultati:
String
Integer
CommandButton
Class1
Boolean
Non ho una copia di VB6 a portata di mano, ma penso che ti serva il file
Typename()
funzione...Posso vederlo in Excel VBA, quindi probabilmente è nello stesso runtime.È interessante notare che l'aiuto sembra suggerire che non dovrebbe funzionare per un tipo definito dall'utente, ma questo è l'unico modo in cui io abbia mai Fare usarlo.
Estratto dal file della guida:
Funzione NomeTipo
Restituisce una stringa che fornisce informazioni su una variabile.
Sintassi
NomeTipo(nomevar)
L'argomento Varname richiesto è una variante contenente qualsiasi variabile tranne una variabile di tipo definito dall'utente.
Ciò dovrebbe rivelarsi difficile, poiché in VB6 tutti gli oggetti sono COM (IDispatch
) cose.Quindi sono solo un'interfaccia.
TypeOf(object) is class
probabilmente esegue solo una chiamata COM get_interface (ho dimenticato il nome esatto del metodo, scusate).