C#点击控件

时间:2014-11-02 22:16:37

标签: c# winforms custom-controls

我正在尝试创建一个自定义控件,可以在点击时触发。 我的控件只是一个面板,里面有几个标签和一个图片框。

点击效果很好,唯一的问题是我必须点击控件的背景,如果我按下图片框,则无效。

我已将点击事件添加到控件中,但我想在其中的每个位置按下以触发事件,而不仅仅是面板的背景。

我考虑添加一个完全覆盖控件的透明对象。我实际上不喜欢这个想法,但是,我尝试过一个图片盒,但我无法看透它。它不透明。我只能看到面板背景,但它涵盖了标签和图像。

感谢您的支持。

2 个答案:

答案 0 :(得分:3)

如果你的面板中只有几个对象,你可以将它包含的所有对象的Click事件挂钩到同一个事件处理程序,这样做没有错。

public class MyUserControl : UserControl
{
    public event Action<MyUserControl> MyControlClick

    public string ID {get; set;}

    public MyUserControl()
    {
        InitializeComponents();

        // The same event handler code will be used for the three controls
        myPictureBox.Click += global_Click;
        myLabel1.Click += global_Click;
        myLabel2.Click += global_Click;
        this.Click += global_Click;
    }

    void global_Click(object sender, EventArgs e)
    {
        if (MyControlClick != null)
            MyControlClick(this);
    }
}

如果您拥有更重要的对象数量,则可以依靠this answer创建一个真正透明的面板来处理点击。缺点是您必须根据鼠标位置使用HitTest检测单击了哪个对象。

在表格方面:

aControl.MyControlClick += aControl_MyControlClick;

// ...

// This code is triggered when a MyUserControl is clicked
void aControl_MyControlClick(MyUserControl ctl)
{
    MessageBox.Show(ctl.ID);
}

答案 1 :(得分:0)

其实!您不能向Usercontrol中的元素引发任何事件,除非您必须将自己的方法应用于您的usercontrol,或者您可以在usercontrol中禁用该元素,但它将更改该元素的颜色但它会在您单击时引发单击事件控制。