在标准模块中如何访问自定义控件中的函数 如何在标准模块中,调用自定义控件中的函数??我将函数声明成Friend,不行。Friend Function foo()End Function在标准模块中这样调用call Usercontrol.foo(),编译时出现错误:变量未定义。应该怎么办呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你在模块中定义的函数,而且没有返回值,那么在模块中调用的话不需要有括号Friend Function foo() ........End FunctionFriend Function dy() fooEnd Function 调用者必须拥有控件的一实例才能调用。你可在模块调用方法,多传一个控件引用进去public test(byref oCtl as 控件) ...... call oCtl.foo() ......end function 而且VB里面有Friend吗?即便有,这里也不存在友元这个概念 谢谢你的回答,但是问题不是出现在这个地方,而是在标准模块中不能调用在自定义控件中定义的函数。直接调用就出现:过程或函数未定义错误。在函数名前面加上“Usercontrol.”又出现变量未定义错误。 而且VB里面有Friend吗?即便有,这里也不存在友元这个概念----当然有啦。的确不是友元的概念。只是标示了调用函数的范围是:同一个工程内可以访问。这个范围介于public和private之间。 call Usercontrol.foo(),编译时出现错误:变量未定义。应该怎么办呢?可能是因为你的函数没有返回值 , 你可以直接调用 Usercontrol.foo Friend 修改窗体模块或者类模块中的一个过程的定义,使得该过程可以被类外的模块调用,但必须是在定义该类的工程的部分内。Friend 过程在标准的模块中是不能使用的。______________________________________________________________________嗯,以前没用这个东西,今天学到,呵呵 ...胡说了 可以访问吗自定义控件中的函数吗>? 我不知道.....多处用他 为什么不把他放到mod里 谢谢各位捧场,呵呵。我把问题的来源说说,问题已经解决了。和大家分享一下:我想在vb中做一个可以编辑subitem的listview控件。在这个地方找到一个很好的例子:Brad Martinez, http://www.mvps.org。他给textbox写了一个新的窗口函数,去响应WM_Killfocus消息。这个新的窗口函数必须定义在标准的模块中,因为是这样用的 :Call SubClass(Text1.hWnd, AddressOf WndProcForText)由于要使用:AddressOf ,所以必须定义在普通模块中,但是在WndProcForText中,我又要调用一个自定义控件中的函数。如果是普通的工程,很好解决,直接写:frm***.foo ,就可以调用了。但是自定义控件模块工程中这样写: usercontrol.foo.是不行的。原因就是编程人生说的。但是,“多传一个控件引用进去”也是不行的,因为窗口函数的参数个数是固定的,不能传了。 接着写:后来绕了个弯子算是解决了。通过SetProp (API),把Listview的窗口句柄作为textbox的窗口属性存起来,在WndProcForText窗口处理函数中,用SetProp 得到listview的窗口句柄,并向listview发送WM_SETFOCUS消息,于是,textbox的LostEvent事件产生了。然后在控件模块中,响应textbox的lostevent事件,这样就可以调用foo啦。乱糟糟写了一堆,不知道有没有写清楚。类似的问题用google搜了一下,也有老外问过,不过最后都没有答案。我这样做,感觉也挺麻烦的。有没有谁还有更好的方法,请赐教。谢谢。 写错了一个地方:用SetProp 得到listview的窗口句柄--应该是用GetProp函数 你为何非得用对TextBox子类来处理呢?如果不用子类的话,当然就不存在调用问题你使用子类无非就是要响应WM_Killfocus,然后调用Foo将TextBox值修改SubListitems值,直接使用TextBox的LoseFocus事件,在其中调用Foo难道不行吗?! lostfocus事件和WM_KillFocus是不一样的。为了达到更好的效果,所以才去处理WM_KillFocus消息。他们的区别是: its LostFocus event it not fired when losing focus to a window outside the app.这是那个源程序的注释。我做过试验的,如果不响应WM_KillFocus,在listview所在的对话框之外进行鼠标操作时,lostfocus事件是不会发生的。 求教:串口通信发送、接收16进制数据为何不能正常显示? 继续发时间查询的问题 永不退色的BASIC造就BASIC不变的主题! 如何用vb代码创建一个名叫“cmdStart”的按钮? 请问如何将窗体和报表内容导入word? 请教用winsock怎么点对点发送文件?? 关于实现datagrid控件列拖动,请指教 vb中用data report 制作报表,显示第一会后正确,当数据源改变,第二会显示时,怎么还是第一回的数据。 编写一个借助FTP上传和下载的工具(跪求) 谁解决我的问题,决不吝啬分数!!! 想转让这套程序的源码及资源文件 有点难度的问题:vb中如何对EXCEL作如下操作(分不够再加)
........
End FunctionFriend Function dy()
foo
End Function
你可在模块调用方法,多传一个控件引用进去public test(byref oCtl as 控件)
......
call oCtl.foo()
......
end function
----当然有啦。的确不是友元的概念。只是标示了调用函数的范围是:同一个工程内可以访问。这个范围介于public和private之间。
call Usercontrol.foo(),编译时出现错误:变量未定义。应该怎么办呢?可能是因为你的函数没有返回值 , 你可以直接调用 Usercontrol.foo
我想在vb中做一个可以编辑subitem的listview控件。在这个地方找到一个很好的例子:Brad Martinez, http://www.mvps.org。他给textbox写了一个新的窗口函数,去响应WM_Killfocus消息。这个新的窗口函数必须定义在标准的模块中,因为是这样用的 :
Call SubClass(Text1.hWnd, AddressOf WndProcForText)
由于要使用:AddressOf ,所以必须定义在普通模块中,但是在WndProcForText中,我又要调用一个自定义控件中的函数。如果是普通的工程,很好解决,直接写:frm***.foo ,就可以调用了。但是自定义控件模块工程中这样写: usercontrol.foo.是不行的。原因就是编程人生说的。但是,“多传一个控件引用进去”也是不行的,因为窗口函数的参数个数是固定的,不能传了。
后来绕了个弯子算是解决了。通过SetProp (API),把Listview的窗口句柄作为textbox的窗口属性存起来,在WndProcForText窗口处理函数中,用SetProp 得到listview的窗口句柄,并向listview发送WM_SETFOCUS消息,于是,textbox的LostEvent事件产生了。然后在控件模块中,响应textbox的lostevent事件,这样就可以调用foo啦。
乱糟糟写了一堆,不知道有没有写清楚。
类似的问题用google搜了一下,也有老外问过,不过最后都没有答案。
我这样做,感觉也挺麻烦的。有没有谁还有更好的方法,请赐教。谢谢。
直接使用TextBox的LoseFocus事件,在其中调用Foo难道不行吗?!