确定对象类型

Posted

技术标签:

【中文标题】确定对象类型【英文标题】:Determine Object Type 【发布时间】:2010-01-19 01:59:26 【问题描述】:

在传递对函数的引用时,有没有办法确定 Object 类型?

我正在使用安全权限功能,该功能确定用户是否有权查看/编辑通过引用传递给它的表单。我想扩展它以包括报告。

为了保持函数的通用性,我想将表单或报表的引用作为对象传递,例如: function gfSecurity_Permission(obj as Object)

但是,我需要确定函数内对象的type

有人知道怎么做吗?

MTIA

【问题讨论】:

【参考方案1】:

看看

typeOf and typeName

通用对象变量(即你声明为对象的变量) 可以保存任何类的对象。使用 Object 类型的变量时, 您可能需要根据类别采取不同的行动 目的;例如,某些对象可能不支持特定的 属性或方法。 Visual Basic 提供了两种方法来确定 哪种类型的对象存储在对象变量中:TypeName 函数和 TypeOf...Is 运算符。

TypeName 和 TypeOf...Is 这 TypeName 函数返回一个字符串,是当你 需要存储或显示一个对象的类名,如图 以下代码片段:

Dim Ctrl As Control = New TextBox  
MsgBox(TypeName(Ctrl))

TypeOf...Is 运算符是测试对象的最佳选择 类型,因为它比等效的字符串比较快得多 使用类型名称。以下代码片段使用 TypeOf...Is 在 If...Then...Else 语句:

If TypeOf Ctrl Is Button Then  
    MsgBox("The control is a button.") 
End If

【讨论】:

在 Access VBA 中找不到对 TypeOf 关键字的任何引用。怀疑这只是.NET。 Here 是 MSDN 对 Access VBA 中 TypeName 函数的引用。顺便说一句,这可能很方便:list of all Access VBA functions by category。 @simon,它是一个运算符并且存在于 - 我猜 - 所有版本的 VBA .. msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx @Gaby:我认为您提供的参考是针对 VB.NET,而不是 VBA。当我寻找对 TypeOf 的引用时,我只能找到 VB.NET 的文章,找不到任何关于 VBA 的文章。 也许这个链接也有用:mrexcel.com/forum/excel-questions/… 确实,在帮助中提到 TypeOf“操作符”没有自己的部分可能会有所帮助。相反,Access VBA 帮助将其称为“If TypeOf”结构,位于与 If...Then...Else 语句相同的部分。【参考方案2】:

确定 access 中的访问类型的最简单方法是在 Access 的系统表中进行对象查找。

这里将是查找:

DLookup("Type","MSysObjects","NAME = '" & strObject & "'")

strObject 是 Access 中对象的名称

如果对象在 Access 中不存在,则结果为以下数字之一或 NULL

1 = Access Table
4 = OBDB-Linked Table / View
5 = Access Query
6 = Attached (Linked) File  (such as Excel, another Access Table or query, text file, etc.)
-32768 = Access Form
-32764 = Access Report
-32761 = Access Module

因此,dlookup 将为表单提供“-32768”或为报告提供“-32764” 希望有帮助

【讨论】:

此方法仅适用于 Access 对象,它不会返回控件类型。 TypeName 返回 Access 对象类型和控件类型。

以上是关于确定对象类型的主要内容,如果未能解决你的问题,请参考以下文章

如何确定对象类型是不是为内置系统类型

无法确定类型“Class”的JSON对象类型

如何在打字稿中使用可能的字符串和数字索引确定对象的类型?

在 Javascript 中确定对象类型的最佳实践

如何更精确的确定javascript的对象类型?

如何更精确的确定javascript的对象类型?