用户自定义控件的单击事件问题

3fasdgveASDRG 2016-01-27 04:41:30
有一个用户自定义控件,上面有一个Label和一个PictureBox,在Form中添加该控件,名称是control1,它的单击事件是control1_Click,但是点击到PictureBox或者Label的位置的时候执行不到control1_Click事件,怎么能让它也执行到?
...全文
442 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvfeng19806001 2016-01-28
  • 打赏
  • 举报
回复
event是事件关键字,加和不加的区别,你可以搜下,如果你是初学者,这个得慢慢体会,看看下面这个例子 http://www.cnblogs.com/xiaofengfeng/p/3547915.html
crystal_lz 2016-01-28
  • 打赏
  • 举报
回复
哪有那么复杂 直接在你的 label 的click 里面 private void label_click(object sender,EventArgs e){ //你的代码 this.OnClick(null);//手动触发控件的Click事件 picbox同理 } 至于你想先触发click还是执行你 label 里面的代码 看你的顺序
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 11楼lvfeng19806001 的回复:
如果是上面我说的意思,你点击自定义控件的点击事件在form中处理,lable的事件在自定义控件中处理,而且点击lable的时候既要处理lable的事件,还要触发form中自定义控件的点击,如下处理。 1:在自定义控件中,自定义对外单击事件 //定义委托 public delegate void BtnClickHandle(object sender, EventArgs e); //定义事件 public event BtnClickHandle UserControlBtnClicked; 自定义控件usercontrol的click事件 private void usercontrol_Click(object sender, EventArgs e) { if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } lable的click事件 private void lblel_Click(object sender, EventArgs e) { //lable原来的单击逻辑 ....... //最后加上 if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } 2:form窗体的自定义控件不要用默认的click事件,用自定义的UserControlBtnClicked事件 private void form1_UserControlBtnClicked(object sender, EventArgs e) { //点击逻辑 }
再请教一个问题,,我把event关键字去掉也正常执行,这个关键字有什么用?
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 11楼lvfeng19806001 的回复:
如果是上面我说的意思,你点击自定义控件的点击事件在form中处理,lable的事件在自定义控件中处理,而且点击lable的时候既要处理lable的事件,还要触发form中自定义控件的点击,如下处理。 1:在自定义控件中,自定义对外单击事件 //定义委托 public delegate void BtnClickHandle(object sender, EventArgs e); //定义事件 public event BtnClickHandle UserControlBtnClicked; 自定义控件usercontrol的click事件 private void usercontrol_Click(object sender, EventArgs e) { if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } lable的click事件 private void lblel_Click(object sender, EventArgs e) { //lable原来的单击逻辑 ....... //最后加上 if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } 2:form窗体的自定义控件不要用默认的click事件,用自定义的UserControlBtnClicked事件 private void form1_UserControlBtnClicked(object sender, EventArgs e) { //点击逻辑 }
问题解决,谢谢~
lvfeng19806001 2016-01-27
  • 打赏
  • 举报
回复
如果你的自定义控件的点击事件和label的点击事件都在自定义控件中处理,那也可以不用委托,直接就在自定义控件中,lable的点击事件代码后面,跟上调用自定义控件的点击事件的代码就行了!
lvfeng19806001 2016-01-27
  • 打赏
  • 举报
回复
如果是上面我说的意思,你点击自定义控件的点击事件在form中处理,lable的事件在自定义控件中处理,而且点击lable的时候既要处理lable的事件,还要触发form中自定义控件的点击,如下处理。 1:在自定义控件中,自定义对外单击事件 //定义委托 public delegate void BtnClickHandle(object sender, EventArgs e); //定义事件 public event BtnClickHandle UserControlBtnClicked; 自定义控件usercontrol的click事件 private void usercontrol_Click(object sender, EventArgs e) { if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } lable的click事件 private void lblel_Click(object sender, EventArgs e) { //lable原来的单击逻辑 ....... //最后加上 if (UserControlBtnClicked != null) UserControlBtnClicked(this, new EventArgs()); } 2:form窗体的自定义控件不要用默认的click事件,用自定义的UserControlBtnClicked事件 private void form1_UserControlBtnClicked(object sender, EventArgs e) { //点击逻辑 }
小鬼当家家 2016-01-27
  • 打赏
  • 举报
回复
那就在注册控件click事件的同时将事件注册到picturebox和label
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 8楼lvfeng19806001 的回复:
你的意思是Lable需要执行原来的改变颜色等后,还要继续执行自定义控件的点击逻辑?
嗯,对
lvfeng19806001 2016-01-27
  • 打赏
  • 举报
回复
你的意思是Lable需要执行原来的改变颜色等后,还要继续执行自定义控件的点击逻辑?
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 4 楼 xiaoguidangjiajia 的回复:
直接将PictureBox或者Label的enable属性设置为false就可以了。PictureBox或者Label仅仅用来显示,设置为enable无影响
设置了Label的颜色,有没有办法不影响到它的颜色?
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 2 楼 lvfeng19806001 的回复:
自定义控件中的lable和picturebox在上面,如果点击这两个也执行自定义控件的点击事件,这两个控件的点击事件指向自定义控件的点击事件。
在这个控件的代码里有控件、Label和PictureBox的Click事件,用来改变颜色之类的。---Click一 在窗体中,这个控件的Click事件是执行另一段代码,而我点击到Label或者PictureBox的位置的时候,不会执行这个Click。---Click二
3fasdgveASDRG 2016-01-27
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
PictureBox或者Label添加点击事件,指向控件的点击
在这个控件的代码里有控件、Label和PictureBox的Click事件,用来改变颜色之类的 在窗体中,这个控件的Click事件是执行另一段代码,而我点击到Label或者PictureBox的位置的时候,不会执行这个Click
sinodzh 2016-01-27
  • 打赏
  • 举报
回复
窗体应该有个事件捕获,可以捕获所有的事件的设置, 假如没有那只能自己在初始化完了后,在load或者哪里讲容器内的事件注册到控件窗体,相当于点击了控件,然后事件传递给控件。
小鬼当家家 2016-01-27
  • 打赏
  • 举报
回复
直接将PictureBox或者Label的enable属性设置为false就可以了。PictureBox或者Label仅仅用来显示,设置为enable无影响
lvfeng19806001 2016-01-27
  • 打赏
  • 举报
回复
自定义控件中的lable和picturebox在上面,如果点击这两个也执行自定义控件的点击事件,这两个控件的点击事件指向自定义控件的点击事件。
bdmh 2016-01-27
  • 打赏
  • 举报
回复
PictureBox或者Label添加点击事件,指向控件的点击

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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