您的位置:程序门 -> .net技术 -> vb.net



关于用户控件(usercontrol)的问题!请高手不吝赐教!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于用户控件(usercontrol)的问题!请高手不吝赐教![已结贴,结贴人:wangfeng12345678]
发表于:2008-02-20 18:40:28 楼主
我创建了一个用户控件(假设名为picbtn),这个用户控件由一个label和一个picturebox组成。
现在我在form里引用这个用户控件picbtn(实例名为picbtn1),希望单击时弹出对话框(这个用户控件相当于一个按钮的功能)。我写的代码如下:
vb.net code
private sub picbtn1_click(byval sender as object, byval e as system.eventargs) handles ucpicbtn1.click msgbox"你点击的是一个用户控件") end sub


现在问题如下:运行程序后,如果我点击这个用户控件上的label和picturebox以外的地方可以弹出对话框,但是点击label和picturebox就不会弹出对话框。(也就是说,点击这个用户控件上的label和picturebox不会执行picbtn_click()事件)。所以我想请教高手,怎样实现点击用户控件上的label和picturebox也能执行picbtn_click()事件???
发表于:2008-02-20 18:54:441楼 得分:2
在label的click事件中raiseevent   click
发表于:2008-02-20 19:10:222楼 得分:0
楼上的高手,可以详细说明一下吗?谢谢!
发表于:2008-02-20 19:13:553楼 得分:2
先声明一个事件.在click事件中raiseevent   这个事件
发表于:2008-02-20 19:56:014楼 得分:0
可以给出一段代码供参考吗?谢谢。
发表于:2008-02-21 09:44:295楼 得分:2
vb.net code
private sub picbtn1_click(byval sender as object, byval e as system.eventargs) handles ucpicbtn1.click msgbox"你点击的是一个用户控件") end sub '以上是你的代码,我在下面进行了改动,注意handles后面 private sub picbtn1_click(byval sender as object, byval e as system.eventargs) handles ucpicbtn1.click,label1.click,picturebox1.click msgbox"你点击的是一个用户控件") end sub '上面的label1就是你的那个label控件,picturebox1同理


handles后面加的就是你想捕获的某个控件的某个消息,可以让多个控件同时共享一个消息处理函数.前提是它们的消息处理函数所接收的参数的类型是一样的
发表于:2008-02-21 10:35:576楼 得分:0
感谢楼上lizhengnan   的回复!!!可能你没有明白我上面写的意思。利用handles可以让多个控件同时共享一个消息处理函数没法实现我要的功能。
我的问题是label1和picturebox1这两个控件是picbtn这个用户控件内部的控件。也就是说picbtn这个用户控件我是由label1和picturebox1这两个控件组成的。
发表于:2008-02-21 11:29:117楼 得分:2
vb.net code
imports system.io imports system.reflection imports system.runtime.interopservices imports system.diagnostics.fileversioninfo public class usercontrol1 public structure mousehookstruct public pt as point public hwnd as intptr public hittest as int32 public extra as int32 end structure public delegate function callback(byval ncode as int32, byval wparam as intptr, byref lparam as mousehookstruct) as int32 <marshalas(unmanagedtype.functionptr)> private _mouseproc as callback private declare function setwindowshookexw lib "user32.dll"byval idhook as int32, byval hookproc as callback, byval hinstance as intptr, byval wparam as int32) as int32 private declare function callnexthookex lib "user32.dll"byval idhook as int32, byval ncode as int32, byval wparam as intptr, byref lparam as mousehookstruct) as int32 private declare function getcurrentthreadid lib "kernel32.dll" () as integer private lngmousehook as long public event myclick(byval sender as object, byval e as system.eventargs) private const wm_lbuttonup as integer = &h202 private sub usercontrol1_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load _mouseproc = new callback(addressof mousehook) lngmousehook = setwindowshookexw(7, _mouseproc, intptr.zero, getcurrentthreadid()) end sub public function mousehook(byval ncode as int32, byval wparam as intptr, byref lparam as mousehookstruct) as int32 if lparam.hwnd = handle or lparam.hwnd = me.label1.handle or lparam.hwnd = me.picturebox1.handle then if wparam = wm_lbuttonup then raiseevent myclick(me, system.eventargs.empty) end if end if return callnexthookex(7, ncode, wparam, lparam) end function end class


代码并不完整,仅供参考.
使用消息做的,相关知识你再找一下吧
发表于:2008-02-21 11:30:498楼 得分:2
vb.net code
private sub usercontrol11_myclick(byval sender as system.object, byval e as system.eventargs) handles usercontrol11.myclick msgbox"aaa") end sub


这是在窗体中对处理他的单击事件


快速检索

最新资讯
热门点击