2012-03-13 62 views
7

我有一个名为GameButton的用户控件,里面有一个标签。当我将用户控件添加到表单并为其添加单击事件时,它会在您单击自定义按钮的背景时触发,而不是标签中的文本?我如何解决这个问题,而不在用户控件代码中添加一堆点击事件?单击控件内部的文本时,用户控件点击事件不起作用?

编辑:UI框架:的WinForms

+0

UI框架(的WinForms,WPF,Web表单,MVC)? – 2012-03-13 01:15:17

+0

对不起,WinForms的 – Oztaco 2012-03-13 01:15:37

+0

也请避免包括标签(例如visual-studio) – 2012-03-13 01:16:05

回答

10

如果我正确理解你,你GameButton用户控件,当点击,而不是当点击该标签会触发事件 - 而您想要。这是因为标签(一个控件)位于背景之上。因此,您还需要使用点击事件注册您的标签。这可以在设计器中手动完成,也可以通过编程为页面上的每个控件完成。

如果你想要做的用户控件的每个控件,把这个到用户控件的onload事件,你可以使用相同的Click事件的每个控件:

foreach(Control c in this.Controls){ 
    c.Click += new EventHandler(yourEvent_handler_click); 
} 

public void yourEvent_handler_click (object sender, EventArgs e){ 
    //whatever you want your event handler to do 
} 

编辑:最好的办法是创建单击用户控件中的事件处理程序属性。这样,每次向用户控件添加/删除单击事件时,都会自动将其添加/删除到用户控件中的所有控件。

public new event EventHandler Click { 
     add { 
      base.Click += value; 
      foreach (Control control in Controls) { 
       control.Click += value; 
      } 
     } 
     remove { 
      base.Click -= value; 
      foreach (Control control in Controls) { 
       control.Click -= value; 
      } 
     } 
    } 

这是按照另一个post

希望这有助于!

+0

我希望能够将点击事件添加到我的自定义按钮中,这与您在设计器中使用常规按钮的方式相同,但它们不会影响标签 – Oztaco 2012-03-13 01:43:16

+0

我不确定我是否理解@EfeOzturkoglu。你希望你的usercontrol就像是一个普通的按钮,你可以在任何地方用一个事件处理程序点击它。 – ImGreg 2012-03-13 01:50:27

+0

是的,就像我不想要添加一个处理程序到控件和它里面的标签每次,只需添加一次,每当我创建一个新的按钮实例 – Oztaco 2012-03-13 01:56:35

0

让您的标签的“启用”属性“假,那么鼠标事件将在用户控制工作。