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

2025-06-23 21:26:05
推荐回答(1个)
回答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就行了。