禁用子控件事件

时间:2013-11-29 15:17:43

标签: c# events user-controls

我的自定义控件的子控件阻碍了我的自定义控件中的鼠标事件。我已经完成了接受的答案以及这个帖子底部的答案......

exposing-events-of-underlying-control

我没有让他们工作(底部的答案对我来说似乎最直接)。但实际上我想完全禁用它们的事件。我有一个pictureBox和一个标签,我不需要与任何一个子控件进行交互。有没有办法禁用它们,以便它们不会干扰我的自定义控件的事件?

编辑:

我正在使用自定义控件来收集和处理许多内容,并将它们作为属性提供。当我点击它时,我需要访问属性。当事件发生在子控件上时,我无法访问自定义控件的属性。以下代码以我的形式...

    public void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        var myControl = sender as SubstanceViewer;
        richTextBox1.Text = myControl.substanceInfo;            
    }

所以我需要访问父控件的属性。

1 个答案:

答案 0 :(得分:1)

如果需要由自定义控件本身处理的子控件通常捕获的事件,则只需在运行时将这些事件连接到自定义控件的构造函数中。

例如,如果您需要PictureBox和Label的MouseMove()事件来触发UserControl的已连线事件:

public partial class SomeUserControl : UserControl
{

    public SomeUserControl()
    {
        InitializeComponent();
        this.pictureBox1.MouseMove += SomeUserControl_MouseMove;
        this.label1.MouseMove += SomeUserControl_MouseMove;
    }

    private void SomeUserControl_MouseMove(object sender, MouseEventArgs e)
    {

    }

}

请注意,由于不同的控件正在触发相同的处理程序,因此您需要将其考虑在内。例如,上面处理程序中的e.Xe.Y值将相对于源控件。

*您也可以使用IDE本身在设计时连接这些事件,但我认为代码更好地说明了解决方案。