低级有关问题:控件工程模块中访问控件的有关问题
低级问题:控件工程模块中访问控件的问题
我新建了一个名为LRCShow自定义控件的工程,并添加了一个标准模块。我想在模块的过程中引用控件该怎么写?我用LRCShow或者Usercontrol都不行。
如果我想在过程参数中引用控件该怎么写?例如如果引用一个picturebox可以写为Pic as picturebox。但是引用控件该怎么写呢?LRC as control?LRC as form?我把参数写为LRC as control但是好像不行,向这个参数传入Usercontrol提示“使用基类名无效”,传入LRCShow提示Byref参数类型不符,传入Me提示“实时错误13:类型不匹配”。
请教各位大侠了
------解决方案--------------------
不能引用自身,编译后被其它程序引用
------解决方案--------------------
我新建了一个名为LRCShow自定义控件的工程,并添加了一个标准模块。我想在模块的过程中引用控件该怎么写?我用LRCShow或者Usercontrol都不行。
如果我想在过程参数中引用控件该怎么写?例如如果引用一个picturebox可以写为Pic as picturebox。但是引用控件该怎么写呢?LRC as control?LRC as form?我把参数写为LRC as control但是好像不行,向这个参数传入Usercontrol提示“使用基类名无效”,传入LRCShow提示Byref参数类型不符,传入Me提示“实时错误13:类型不匹配”。
请教各位大侠了
------解决方案--------------------
不能引用自身,编译后被其它程序引用
------解决方案--------------------
- VB code
Sub X (LRC As Object) ... End Sub
------解决方案--------------------
用类地址,因为控件都有窗口句柄,而在模块中的消息处理过程都会传递窗口句柄,
所以可以通过窗口句柄存储类地址来传递你控件类的实例句柄。然后在模块函数中
通过复原类的方法就可以引用到你的控件对象了,当然也可以进行出发控件的方法
或进行属性读写操作
------解决方案--------------------
道理一样的,看看下面的代码
- VB code
... Dim ClassAddress As Long Dim LRC As Control '这里可以用你的控件对象 GetWindowLong hwnd, GWL_USERDATA, ClassAddress If ClassAddress=0 Then MainWndProc = CallWindowProc(PrevWndProc, _ hwnd, _ Message, _ wParam, _ lParam) Exit Function End If CopyMemory LRC, ClassAddress, 4 Select Case Message ... Msgbox "Height:" & LRC.Height,64,"提示" CopyMemory LRC, 0&, 4 '用完后释放对象 ...