单击控件内的文本时,用户控件单击事件不起作用?

Ozt*_*aco 6 c# mouse events onclick winforms

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

编辑:UI框架:winforms

ImG*_*reg 12

如果我理解正确,您的GameButton用户控件将在单击时触发事件,但不会在单击标签时触发 - 并且您需要两者.这是因为标签(控件)位于背景之上.因此,您还需要使用click事件注册您的标签.这可以在设计器中手动完成,也可以以编程方式为页面上的每个控件完成.

如果要在UserControl中执行每个控件,请将其放入UserControl的OnLoad事件中,并且可以对每个控件使用相同的单击事件:

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
}
Run Code Online (Sandbox Code Playgroud)

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

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;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是另一篇文章:

希望这可以帮助!