我的usercontrols中有不同的控件。并以我的形式动态加载用户控件
UserControl2 usercontrol = new UserControl2();
usercontrol.Tag = i;
usercontrol.Click += usercontrol_Click;
flowLayoutPanel1.Controls.Add(usercontrol);
private void usercontrol_Click(object sender, EventArgs e)
{
// handle event
}
单击usercontrol中的控件时,不会触发click事件。它只在我点击usercontrol的空白区域时才会触发。
答案 0 :(得分:11)
递归所有控件并将每个控件的Click()事件连接到同一个处理程序。从那里调用InvokeOnClick()。现在单击任何内容将触发主UserControl的Click()事件:
public partial class UserControl2 : UserControl
{
public UserControl2()
{
InitializeComponent();
WireAllControls(this);
}
private void WireAllControls(Control cont)
{
foreach (Control ctl in cont.Controls)
{
ctl.Click += ctl_Click;
if (ctl.HasChildren)
{
WireAllControls(ctl);
}
}
}
private void ctl_Click(object sender, EventArgs e)
{
this.InvokeOnClick(this, EventArgs.Empty);
}
}
答案 1 :(得分:1)
这可以解决您的问题。
//Event Handler for dynamic controls
usercontrol.Click += new EventHandler(usercontrol_Click);
答案 2 :(得分:0)
拿这个:
this.btnApply.Click + = new System.EventHandler(this.btnApply_Click);
答案 3 :(得分:0)
因为来自ChildControls
的事件未传播给父母。因此,您必须处理添加到Click
的每个子控件的UserControl
事件。
答案 4 :(得分:0)
1 - 在nameapace
定义一名代表public delegate void NavigationClick(int Code, string Title);
2 - 在UserControl类中定义来自您的委托的事件:
public event NavigationClick navigationClick;
3 - 在UserControl中为您的控件事件编写此代码:
private void btn_first_Click(object sender, EventArgs e)
{
navigationClick(101, "First");
}
4 - 在Windows窗体中,而不是在事件添加时使用UserControl:
private void dataBaseNavigation1_navigationClick(int Code, string Title)
{
MessageBox.Show(Code + " " + Title);
}