首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VarType的一个奇怪现象,该怎么处理

2012-01-13 
VarType的一个奇怪现象不知道坛子中以前有没有人提到过。之前在研究运行时动态添加控件时,曾试着将VBContro

VarType的一个奇怪现象
不知道坛子中以前有没有人提到过。

之前在研究运行时动态添加控件时,曾试着将VBControlExtender用于VB的内置控件,报错“类型不匹配”,于是想看看究竟怎么不匹配。

用WithEvents分别声明了一个TextBox和一个VBControlExtender并实例化,然后分别VarType了一下TextBox和VBControlExtender的实例,结果令我小吃了一惊:VarType(VBControlExtender)的结果是9,即Object,这正常,可VarType(TextBox)的结果是8,也就是String。接着我又用VarType看了一下其他的内置控件,结果与当初所想的都大相径庭,除了OLE竟然没有一个是Object!

好奇怪。。。大家知道为什么吗?

[解决办法]
msdn中说:

说明

VarType 函数自身从不对 vbArray 返回值。VarType 总是要加上一些其他值来指出一个具体类型的数组。常数 vbVariant 只与 vbArray 一起返回,以表明 VarType 函数的参数是一个 Variant 类型的数组。例如,对一个整数数组的返回值是 vbInteger + vbArray,或 8194。如果一个对象有缺省属性,则 VarType (object) 返回对象缺省属性的类型。

[解决办法]
你的意思是用VBControlExtender实例的指针替换TextBox对象的指针?这恐怕不会有什么好结果,只会引起系统的混乱,轻则无反应,重则崩溃,结果无法预料。
没有研究过VBControlExtender和VB内置控件的关系,不过msdn上说:
“将引用值赋值给变量时的有关限制
将 VBControlExtender 对象设置到动态添加的控件时,需要注意的是:内部控件不能够被赋值给变量。”
由此可见,VBControlExtender和VB内置控件是不相容的。

即使像Single, Integer这些简单类型转换时都会引起精度丢失,交换指针也可能引起系统崩溃,更何况VBControlExtender和VB内置控件这些复杂的类型!不能期望把某条狗叫做“张三”它就变成人了。
[解决办法]
估计VBControlExtender应该是接收基于COM的对象的.

而内部的一些对象,比如按钮和定时器这些,可能并不是严格按COM对象标准来折腾的,有一套仅适用于VB的标准.

具体你可以引用一些外部控件再试试看,实验一下有什么结果:)
[解决办法]

探讨

我要做的东西要动态使用几乎所有VB内部控件,问题不在于控件类型与数量的多少,而在于我想要使用一个统一的过程来处理所有控件的事件,不管用控件数组也好还是用WithEvents指令声明所需类型的控件也好,都不得不为每一个控件分别添加过程,我总觉得这些是冗余的东西,想想办法精简一下

热点排行