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"

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top