面板上的C#鼠标事件不适用于面板中的对象

时间:2013-12-07 23:13:41

标签: c# events mouseevent mouse mousedown

我正在开发一个简单的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 无济于事。

任何帮助都会受到赞赏,甚至是一种更好的方法来完成我想要实现的目标。

2 个答案:

答案 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命中测试引擎将不会在父元素上引发事件。