Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在按下鼠标时跟踪鼠标进入事件c#visual studio?_C#_Winforms_Visual Studio_Mouseevent - Fatal编程技术网

如何在按下鼠标时跟踪鼠标进入事件c#visual studio?

如何在按下鼠标时跟踪鼠标进入事件c#visual studio?,c#,winforms,visual-studio,mouseevent,C#,Winforms,Visual Studio,Mouseevent,我努力做到以下几点: 当鼠标按下->如果鼠标进入面板,颜色会改变 当鼠标向上->面板在鼠标进入时不会改变 --问题:按下鼠标时,鼠标输入事件没有反应 我如何解决这个问题 //用于菜单中的所有面板 私有void walletpanel0_MouseEnter(对象发送方,事件参数e) { 如果(鼠标向下和上一个面板!=(面板)发送器) { 面板p=(面板)发送器; p、 BackColor=Color.FromArgb(255,26,41,56); previousPanel.BackColor=

我努力做到以下几点: 当鼠标按下->如果鼠标进入面板,颜色会改变 当鼠标向上->面板在鼠标进入时不会改变

--问题:按下鼠标时,鼠标输入事件没有反应

我如何解决这个问题

//用于菜单中的所有面板
私有void walletpanel0_MouseEnter(对象发送方,事件参数e)
{
如果(鼠标向下和上一个面板!=(面板)发送器)
{
面板p=(面板)发送器;
p、 BackColor=Color.FromArgb(255,26,41,56);
previousPanel.BackColor=Color.FromArgb(255,44,62,73);
前面板=p;
}
}
专用void WalletPanel 0u鼠标向下(对象发送方,鼠标目标e)
{
mouseDown=true;
//单击面板时选择该面板的步骤
如果(先前面板!=(面板)发送器)
{
面板p=(面板)发送器;
p、 BackColor=Color.FromArgb(255,26,41,56);
previousPanel.BackColor=Color.FromArgb(255,44,62,73);
前面板=p;
}
}

据我所知,
MouseEnter
MouseMove
MouseLeave
按下鼠标按钮时不会触发事件。松开按钮后,如果在按钮按下时鼠标移动触发了订阅事件,则会触发订阅事件

基本问题是,当
控件上发生
鼠标向下
事件时,
控件
会“捕获”鼠标,直到松开按钮才释放鼠标,这意味着其他
控件
不会接收到移动事件

假设您所有的
面板都订阅了它,下面的事件处理程序应该可以帮助您:

private void Panels_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button != MouseButtons.None)
    {
        Control control = (Control)sender;

        if (control.Capture)
            control.Capture = false;
    }
}

在MouseDown事件中放置断点时,是否会触发
MouseDown事件
。MouseEnter始终在MouseDown之前触发。由于MouseDown将Capture属性设置为true,因此无法在之后激发。使用MouseMove,由于捕获,当您将鼠标悬停在不同的面板上时,它也会激发。使用GetChildAtPoint()获取对面板的引用。并使用MouseCaptureChanged事件检测它被中断。当我在函数中放置断点时,它不会触发“MouseDown”事件no@MethodManWell当鼠标按下时,
MouseMove
事件也会冻结。我试过了,读了微软的帖子。因此,通过使用
MouseCaptureChanged
事件的解决方案,我可以检测捕获状态。但是,当鼠标按下时,我仍然不能使用
MouseMove
事件,因为鼠标仍然按下。我试过使用
ReleaseMouseCapture()
函数,但显然不适用于面板。@Hanspassant谢谢您的评论。虽然我刚刚在MouseMove中集成了相同类型的功能,但我发现它的反应也不像MouseEnter和MouseLeave事件那样,感谢您的回复。我编辑了我的答案,看看它现在是否能帮助你。非常感谢!:这正是我要找的!我希望我能投票支持这个职位,但我需要15%的声誉。