我的自定义控件的子控件阻碍了我的自定义控件中的鼠标事件。我已经完成了接受的答案以及这个帖子底部的答案......
exposing-events-of-underlying-control
我没有让他们工作(底部的答案对我来说似乎最直接)。但实际上我想完全禁用它们的事件。我有一个pictureBox和一个标签,我不需要与任何一个子控件进行交互。有没有办法禁用它们,以便它们不会干扰我的自定义控件的事件?
编辑:
我正在使用自定义控件来收集和处理许多内容,并将它们作为属性提供。当我点击它时,我需要访问属性。当事件发生在子控件上时,我无法访问自定义控件的属性。以下代码以我的形式...
public void Form1_MouseDown(object sender, MouseEventArgs e)
{
var myControl = sender as SubstanceViewer;
richTextBox1.Text = myControl.substanceInfo;
}
所以我需要访问父控件的属性。
答案 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.X
和e.Y
值将相对于源控件。
*您也可以使用IDE本身在设计时连接这些事件,但我认为代码更好地说明了解决方案。