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("触发成功");}但是只有点击控件的空白区域才能触发事件,怎样才能将这一个控件作为一个整体来点击触发?在网上找到的回答如下图所示,但是并不知道如何完成映射,希望各位大佬不吝赐教!
展开
1个回答
展开全部
你引用的那个回答的意思是说,对于winform架构来说,没有事件传播机制(这也是Winform的一个最讨厌的问题),子控件发生的事件,无法直接被父控件感知到。在现代框架下,如WPF,UWP,或基于浏览器的各种Web应用程序,事件传播都是必须原生支持的。如果你确实没有办法使用更新的框架来写用户界面的话,目前的解决方案正如你的那个答案,要在所有子控件的事件发生时,手动触发父控件的相应事件。你可以想象,如果你的控制有好几层的话,那么就只能递归做这件事了。注册子控件事件到父控件的办法基本上是在父控件里这样写:
foreach (var control in this.Controls)
{
((Control)control).Click += new MouseEventHandler(UserControl1_Click);
}
这样等于所有control的click事件都会最终被UserControl1_Click捕获,你把处理程序在写UserControl1_Click就行了。
foreach (var control in this.Controls)
{
((Control)control).Click += new MouseEventHandler(UserControl1_Click);
}
这样等于所有control的click事件都会最终被UserControl1_Click捕获,你把处理程序在写UserControl1_Click就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询