自己用VB做的控件里面包括了一个弹出窗体form,但在form里如何访问控件本身的方法呢?

cooler 2006-10-18 04:49:18
如题。
我用VB做了一个控件,假设控件名字叫做:MyOcx,准备IE里面嵌入使用。
假设控件里面有一个command1按钮。控件里面有个按钮,点击后会弹出一个form。
并有如下方法:
public sub tt1()
msgbox "1111"
end sub

private sub command_click()
form1.show
end sub


问题是,在这个form里面,如何访问这个控件的tt1()方法呢?
------------------------------------------
我尝试直接调用MyOcx.tt1,会报错。
目前我使用的变通方法是:
1、在一个moudle里面,定义一个全局的object变量
public gobjControl as object
2、在控件的初始化事件里面,登记全局变量
Private Sub UserControl_Initialize()
On Error Resume Next
Set gobjControl = Me
End Sub
3、在form里面调用
gobjControl.tt1
问题解决。
-------------------------------------------
最后,问题有两个:
1、各位大侠是否也是我这种处理方案啊?
2、我这种方案,如果两个IE窗口分别调用这个控件,这种全局变量,是否会造成两个IE控件里面变量相互干扰,也就是线程不安全啊?
请指教。谢谢。
...全文
282 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdnzl 2006-10-19
  • 打赏
  • 举报
回复
其实我的方法可行,只是多创建了一个实例,看了楼上的,还是觉得传递句柄有道理
Dunzip 2006-10-18
  • 打赏
  • 举报
回复
这个问题不能直接调用,必须要一个代理。先把要调用的控件代理起来,其后调用代理。


cooler 2006-10-18
  • 打赏
  • 举报
回复
这边继续讨论,希望大家能够顺便教教我控件里面:
控件代码线程安全,全局变量是否线程安全/module模块是否线程安全的知识。

cooler 2006-10-18
  • 打赏
  • 举报
回复
to:我菜兄:
其实这个form是我自己在控件里面load出来的。不是一个独立的窗体去调用我的控件。
to:国际兄
我是想在自己这个控件创建的窗体里面,反过来调用我这个控件的方法而不是控件的子对象。

-----------------------------------------
我问过一个高手,他给了我一个解法,在此给出供大家讨论。
窗体代码:
private obj as Object
public sub setParent(a as Object)
set obj=a
end sub

'在窗体里面调用父控件的代码
private command1_click()
'这里就调用到了!!!
obj.test
end sub
-----------------------------------------------------------
控件代码:
private sub command1_click()
'这里就是创建窗体代码的地方,是控件创建的
form1.show
'这里就是给对方自己的句柄
form1.setParent me
end sub


public sub test
msgbox "调到我了!!!"
end sub
-------------------------------------------------------------

希望比较好解释!感谢大家支持!




ZOU_SEAFARER 2006-10-18
  • 打赏
  • 举报
回复
1. 你这个方法知道 ,不过这样使用
public txt as textbox
Private Sub UserControl_Initialize()
set txt =text1
End Sub

以后使用就
dim x as textbox
set x = Myocx.txt
x.text ="Hello"
就改变了自定义控件里面的txt控件了
csdnzl 2006-10-18
  • 打赏
  • 举报
回复
忘了set d=nothing了,呵呵
csdnzl 2006-10-18
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim d As Object
Set d = CreateObject("工程名称.MyOcx")'此处填写工程名称
d.tt1
End Sub

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧