【问题标题】:How to track mouse enter event while mouse is pressed c# visual studio?按下鼠标时如何跟踪鼠标输入事件c#visual studio?
【发布时间】:2017-12-16 18:56:16
【问题描述】:

我尝试实现以下目标: 按下鼠标时->如果鼠标进入面板,颜色会改变 当鼠标向上时 -> 面板不会在鼠标进入时改变。

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

我该如何解决这个问题?

//for all panels in the menu
private void walletpanel0_MouseEnter(object sender, EventArgs e)
    {
        if ( mouseDown && previousPanel != (Panel)sender)
        {
            Panel p = (Panel)sender;
            p.BackColor = Color.FromArgb(255, 26, 41, 56);

            previousPanel.BackColor = Color.FromArgb(255, 44, 62, 73);

            previousPanel = p;
         }
     }

private void walletpanel0_MouseDown(object sender, MouseEventArgs e)
    {
        mouseDown = true;
        //to select the panel when clicked on it
        if (previousPanel != (Panel)sender)
        {
            Panel p = (Panel)sender;
            p.BackColor = Color.FromArgb(255, 26, 41, 56);

            previousPanel.BackColor = Color.FromArgb(255, 44, 62, 73);

            previousPanel = p;
        }
    }

【问题讨论】:

  • 当您在 mousedown 事件中放置断点时,它会触发 MouseDown Event 吗?
  • MouseEnter 总是触发 before MouseDown。由于 MouseDown 将 Capture 属性设置为 true,因此之后无法触发。使用 MouseMove,由于捕获,它也会在您悬停不同的面板时触发。使用 GetChildAtPoint() 获取对面板的引用。并使用 MouseCaptureChanged 事件来检测它是否被中断。
  • 当我在函数 no@MethodMan 中放置断点时,它不会触发 'MouseDown' 事件
  • 当鼠标按下时,MouseMove 事件也会冻结。我试过了,并阅读了微软的帖子。因此,通过使用MouseCaptureChanged 事件的解决方案,我可以检测到捕获状态。虽然,当鼠标按下时,我仍然无法使用MouseMove 事件,因为鼠标仍然按下。我尝试使用ReleaseMouseCapture()function,但显然不适用于面板。@HansPassant

标签: c# winforms visual-studio mouseevent


【解决方案1】:

据我所知,MouseEnterMouseMoveMouseLeave 事件不会在按下鼠标按钮时触发。释放按钮后,如果在按钮按下时鼠标移动触发了订阅的事件,则会触发它。

基本问题是当MouseDown事件发生在Control上时,Control“捕获”鼠标并且直到释放按钮才释放它,这意味着没有接收到移动事件由其他Controls

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

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

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

【讨论】:

  • 感谢您的评论。虽然我只是在 MouseMove 中集成了相同类型的功能,但我发现它也不会像 MouseEnter 和 MouseLeave 事件那样做出反应
  • 感谢您的回复。我编辑了我的答案,看看它现在是否可以帮助你。
  • 非常感谢! :D 正是我想要的!希望我可以投票支持该帖子,但我需要 15 声望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多