单击动态usercontrol中的控件时,单击事件未触发

时间:2013-06-05 12:43:21

标签: c# winforms event-handling click dynamic-usercontrols

我的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的空白区域时才会触发。

5 个答案:

答案 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);
    }