如何在按下鼠标时跟踪鼠标进入事件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%的声誉。