C# 用户自定义控件事件绑定问题

自定义了一个用户控件UserControl1,里面有picturebox、label,如下图所示。在动态生成控件的过程中进行了事件绑定,代码如下:privatevoidF... 自定义了一个用户控件UserControl1,里面有picturebox、label,如下图所示。在动态生成控件的过程中进行了事件绑定,代码如下:private void Form1_Load(object sender, EventArgs e){ UserControl1 cipan = new UserControl1(); cipan.Click += new System.EventHandler(this.UserControl1_Click); }public void UserControl1_Click(object sender, EventArgs e){ MessageBox.Show("触发成功");}但是只有点击控件的空白区域才能触发事件,怎样才能将这一个控件作为一个整体来点击触发?在网上找到的回答如下图所示,但是并不知道如何完成映射,希望各位大佬不吝赐教! 展开
 我来答
百度网友eb6ab18
2019-09-16 · TA获得超过585个赞
知道小有建树答主
回答量:1068
采纳率:83%
帮助的人:254万
展开全部
你引用的那个回答的意思是说,对于winform架构来说,没有事件传播机制(这也是Winform的一个最讨厌的问题),子控件发生的事件,无法直接被父控件感知到。在现代框架下,如WPF,UWP,或基于浏览器的各种Web应用程序,事件传播都是必须原生支持的。如果你确实没有办法使用更新的框架来写用户界面的话,目前的解决方案正如你的那个答案,要在所有子控件的事件发生时,手动触发父控件的相应事件。你可以想象,如果你的控制有好几层的话,那么就只能递归做这件事了。注册子控件事件到父控件的办法基本上是在父控件里这样写:
foreach (var control in this.Controls)
{
((Control)control).Click += new MouseEventHandler(UserControl1_Click);
}

这样等于所有control的click事件都会最终被UserControl1_Click捕获,你把处理程序在写UserControl1_Click就行了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式