如何确定控件(或对象)的类型?

时间:2016-09-08 16:06:03

标签: vba vb6

有三种方式,特别是在互联网和论坛上进行讨论 How to check type of object in VB 6 - Is there any method other than 'TypeName'
How to check type of Object in VB 6 ? - I do not want to use 'TypeOf' method
How to check type of object in VB 6 - Is there any method other than 'TypeName'

即:
- 字符串方法TypeName
- 笨拙TypeOf
- 按控制名称,以特定符号

定义

我是对的,没有内置工具来获得正常的数字常量,例如MsoControlType

1 个答案:

答案 0 :(得分:8)

直接回答

  

我是对的,没有内置工具来获取正常的数字常量,比如MsoControlType?

是的,这是正确的。除非您使用您已列出的技术实施自己的技术。

好吧,排除VarType,在给定任何对象引用的情况下返回vbObject

迂腐的回答

你所指的是"正常的数字常数"与控件的类型完全无关 - 这些MsoControlType常量只是Enum API用于确定CommandBar值>当您要求创建一个控件时,键入。

MsoControlType.msoControlButton不是类型的控件,它是一个值为1的常量。没有更多,没有更少 - 类型控件是一个类,而不是数字常量:

?TypeName(Application.VBE.CommandBars(1).Controls(1))
CommandBarPopup

CommandBarPopup是类(因此是控件的类型),而不是msoControlPopup,而不是10

CommandBarPopup in the object browser

类型是您向TypeOf [variable] Is [*type*]Dim [variable] As [*type*]提供的内容:它是一个引用类/接口的标识符(如果是当然,对象 - 类型也可以是其中一个基元,例如IntegerBoolean)。鉴于VB6 / VBA中反射功能的缺点,缺少类似.net的类型系统,其中类型本身是一个可以使用的抽象,自定义Enum类型和一个带有对象的函数,具有带Select Case个检查的TypeOf块,是该函数返回表示正常数值常量的最佳选择>提供的对象的类型。