我正在开发一个简单的C#程序,它允许用户使用鼠标移动简单的控件(按钮,文本等),类似于像visual studio这样的可视设计器。控件包含在面板中,它们都按预期工作。但是,当我在面板上调用MouseDown()
时控件包含在内,事件仅在单击面板的空白部分时触发,不当我单击控件中包含的控件时形式。
这是我的MouseDown()
代码:
private void splitContainer2_Panel2_MouseDown(object sender, MouseEventArgs e)
{
Console.WriteLine("MOUSE GRABBED");
...
//More code that uses the X and Y co-ords of the mouse to check which
//Control is selected
...
}
你可以看到它非常简单。单击控件时不会触发writeLine()
。
我看过以下问题: ignore mouse event on label inside panel 无济于事。
任何帮助都会受到赞赏,甚至是一种更好的方法来完成我想要实现的目标。
答案 0 :(得分:1)
为什么不尝试对每个对象使用相同的事件,而不是为面板使用MouseDown()
事件?根据您要执行的操作,添加以下代码:
创建每个表单元素的位置:
nameOfElement.MouseDown += new System.Windows.Forms.MouseEventHandler(this.splitContainer2_Panel2_Objects_MouseDown);
鼠标按下方法:
Control ctrl = (Control)sender;
Console.WriteLine("Moused down on: " + ctrl.Name);
//Code to manipulate mouse down
希望这有帮助!
答案 1 :(得分:0)
使用PreviewMouseDown
。如果子元素吸收事件,WPF命中测试引擎将不会在父元素上引发事件。