Вопрос

Как получить тип (достаточно имени в виде строки) объекта в VB6 во время выполнения?

то естьчто-то вроде:

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

/РЕДАКТИРОВАТЬ: чтобы уточнить, мне нужно проверить динамически типизированные объекты.Пример:

Dim y As Object 

Set y = CreateObject("SomeType")

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

Где вывод будет «CommandButton»

Это было полезно?

Решение

Я думаю, что вы ищете TypeName, а не TypeOf.

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

Редактировать:Что вы имеете в виду под динамическими объектами?Вы имеете в виду объекты, созданные с помощью CreateObject ("" "), потому что это все равно должно работать.

Редактировать:

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

Выходы

Object Type: FileSystemObject

Другие советы

TypeName - это то, что вы хотите...Вот пример вывода:

Код 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

Полученные результаты:

String
Integer
CommandButton
Class1
Boolean

У меня нет под рукой копии VB6, но я думаю, вам понадобится

Typename()

функция...Я вижу это в Excel VBA, так что, вероятно, это та же среда выполнения.Интересно, что справка, похоже, предполагает, что она не должна работать для определяемого пользователем типа, но это почти единственный способ, которым я когда-либо пользовался. делать используй это.

Выдержка из файла помощи:

ТипИмя Функция

Возвращает строку, содержащую информацию о переменной.

Синтаксис

Имя типа (имя_переменной)

Требуемый аргумент Varname-это вариант, содержащий любую переменную, за исключением переменной пользовательского типа.

Это должно оказаться трудным, поскольку в VB6 все объекты являются COM (IDispatch) вещи.Таким образом, они являются лишь интерфейсом.

TypeOf(object) is class вероятно, выполняет только вызов COM get_interface (извините, я забыл точное имя метода).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top