2008-09-09 13 views
6

Jak uzyskać typ (nazwa jako ciąg jest wystarczający) obiektu w VB6 w czasie wykonywania?VB6 Runtime Type Retrieval

czyli coś jak:

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

/EDIT: wyjaśnienie, muszę sprawdzić Dynamicznie typizowanych obiektów. Przykład:

Dim y As Object 

Set y = CreateObject("SomeType") 

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

gdzie wyjście byłoby "CommandButton"

Odpowiedz

8

Myślę, że to, czego szukasz, to TypeName zamiast TypeOf.

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

Edytuj: Co masz na myśli Dynamic Objects? Masz na myśli obiekty utworzone za pomocą CreateObject (""), bo to powinno nadal działać.

Edit:

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

Wyjścia

Object Type: FileSystemObject

+0

Może powinienem wyjaśnić moje pytanie, chcę wiedzieć, co dynamicznie wpisany Obiekt jest więc korzystanie TypeName będzie (w moim przypadku) zwraca tylko "Obiekt". – DAC

0

To powinno okazać się trudne, ponieważ w VB6 wszystkie obiekty są COM (IDispatch) rzeczy. Są więc tylko interfejsem.

TypeOf(object) is class prawdopodobnie tylko wywołuje COM get_interface (nie pamiętam dokładnej nazwy metody, przepraszam).

2

nie mam kopię VB6 do strony, ale myślę, że trzeba funkcję

Typename() 

. .. Widzę to w Excelu VBA, więc prawdopodobnie jest w tym samym środowisku wykonawczym. Co ciekawe, pomoc wydaje się sugerować, że nie powinna działać dla typu zdefiniowanego przez użytkownika, ale jest to jedyny sposób, w jaki mogę go używać.

Wyciąg z pliku pomocy:

TypeName Funkcja

Zwraca ciąg znaków, który zawiera informacje o zmiennej.

Składnia

TypeName (varname)

Wymagana varname argument jest wariant zawierający dowolną zmienną wyjątkiem zmienną typu zdefiniowanego przez użytkownika.

2

NazwaPunktu to to, czego potrzebujesz ...Oto przykład wyjście:

Kod 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 

Wyniki:

String 
Integer 
CommandButton 
Class1 
Boolean