【问题标题】:User Control Click - Windows Forms用户控制单击 - Windows 窗体
【发布时间】:2009-07-01 21:59:13
【问题描述】:

我的 Windows 窗体上有一个自定义用户控件。这个控件上有几个标签。

我将在我的表单上动态显示这些控件的数组,其中包含不同的数据位。

我想要做的是知道当我单击它时选择了哪个用户控件。

当我单击用户控件上的空白区域时,这会起作用,但是,如果我单击用户控件上的任何标签,它将无法识别用户控件单击。

关于如何进行完整的用户控件点击,即使控件上的标签被点击,有什么想法吗?

如果这个问题不清楚,或者您需要更多信息,请发表评论。

我在 c# 中这样做。

谢谢!

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

    当在用户控件上单击另一个控件时,不会触发用户控件的单击事件。您需要手动绑定每个元素的点击事件。您可以在用户控件的代码隐藏上通过一个简单的循环来做到这一点:

    foreach (Control control in Controls)
    {
        // I am assuming MyUserControl_Click handles the click event of the user control.
        control.Click += MyUserControl_Click;
    }
    

    这段代码运行后,MyUserControl_Click 将在用户控件上的任何控件被单击时触发。

    【讨论】:

    • 太棒了!这完全有帮助。非常感谢!
    • 谢谢!!!请注意,您应该为控件内的控件(例如面板内的控件)包含递归添加/删除
    • 另外,您不应该忘记检查事件方法中的对象类型:public void MyUserControl_Click(Object sender, EventArgs e) { if(sender.GetType() is Label) {...} } 。否则你很容易遇到问题。
    【解决方案2】:
        foreach (Control c in this.Controls)
        {
            c.Click += new EventHandler(SameAsForm_Click);
        }
    

    请记住,这不会将组框、面板等中的标签点击事件添加到“SameAsForm_Click”-EventHandler。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多