C# UserControl的事件处理程序不';t火

C# UserControl的事件处理程序不';t火,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,MyUserControl包含各种控件。我为它的click事件创建了一个事件处理程序。我希望在用户单击我的用户控件上的任意位置时触发/调用事件处理程序 这是我用来将UserControl添加到WinForms应用程序的方法 private void addContact(some parameters here) { //This is my usercontrol contactsListItem.contactsListItem contact = new contact

My
UserControl
包含各种控件。我为它的click事件创建了一个事件处理程序。我希望在用户单击我的用户控件上的任意位置时触发/调用事件处理程序

这是我用来将
UserControl
添加到WinForms应用程序的方法

private void addContact(some parameters here)
{
     //This is my usercontrol
     contactsListItem.contactsListItem contact = new contactsListItem.contactsListItem();

    //
    //some codes here
    //

    //Adding an event handler for the click event
    contact.Click += new EventHandler(contact_Click);

    //Adding the UserControl to my application
    flowLayoutPanel_contactsList.Controls.Add(contact);
}
联系人单击(…)
事件处理程序应更改my
UserControl
的背景。我试着进入代码中查看事件处理程序是否启动,我发现无论我在哪里单击我的
UserControl
,它都不会启动

我在网上搜索过。我遇到了代理、订阅者和发布者等术语


如何使我的
UserControl
单击事件的事件处理程序启动?

您似乎在正确的轨道上,但不清楚您的
联系人是什么。对于要传递参数的方法,通常使用委托(本质上是指向函数的指针):

if (bDeleteRdClick)
    DeleteRD.Click -= delegate { DeleteRDClick(this.Object); };
DeleteRD.Click += delegate { DeleteRDClick(this.Object); };
如果您确定要删除预先存在的委托,否则它们将“堆叠”,在不需要时触发多个方法

对于上述方法,在我看来,使用
EventHandler
似乎是正确的方法,但正如我在上文中所述,检查
联系人是否为正确类型不会被忽略:

if (this.contact.GetType() == typeof(RibbonButton))
{
    RibbonButton Rb = (RibbonButton)contact;
    Rb.Click += new EventHandler(contact_Click);
}

我希望这能有所帮助。

您的用户控件的结构是什么?WindForms中不会冒泡单击事件,因此如果您单击用户控件中的控件,后者不会触发任何单击事件

编辑:

最简单的解决方案是通过在用户控件中附加一个处理程序,手动从每个子级冒泡事件:

child1.Click += new EventHandler(child_Click);
child2.Click += new EventHandler(child_Click);
child3.Click += new EventHandler(child_Click);
在child_Click(点击)中触发点击事件:

this.OnClick(e);

既然是这样,我应该怎么做,这样每当我点击我的UserControl中的控件时,就好像我在点击UserControl本身一样?