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

问题描述 投票:0回答:1

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

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

我该如何解决这个问题?

//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;
        }
    }
c# winforms visual-studio mouseevent
1个回答
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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.