c# mouseleave和mouseenter事件不会在点击鼠标按钮时触发

本文关键字:鼠标 按钮 mouseleave mouseenter 事件 | 更新日期: 2023-09-27 18:06:45

标题说明了一切。我有一个充当白板的面板。鼠标移动,绘制鼠标轨迹。工作良好,但如果鼠标离开面板的边缘,我想调用鼠标向上事件和鼠标向下事件,如果鼠标离开进入面板,而左键被点击

 private void panel2_MouseLeave(object sender, EventArgs e)
    {
        if (mousedraw == true)
        {
            panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0));
        }
    }
    private void panel2_MouseEnter(object sender, EventArgs e)
    {
        if (mousedraw == true)
        {
            panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0));
        }
    }

mousedraw是一个bool值,用于判断左键是否被点击。

问题是:

当鼠标按下时,left和enter事件不会触发。

c# mouseleave和mouseenter事件不会在点击鼠标按钮时触发

MouseEnter和mouseLeave在按下按钮时不会触发。但是,当按钮最终被释放时,如果鼠标在按钮按下时移进或移出面板,则会触发相应的mouseEnter或mouseLeave事件。只要按钮被按下,mouseMove事件将继续触发,甚至在面板的边界之外。这允许鼠标在通过控件的边界后继续拖动或其他操作,这是大多数Windows应用程序的工作方式。

如果你可以在你的应用程序中使用这个行为,它将是一个更"标准"的用户界面。

如果您确实需要在鼠标离开面板时触发mouseUp,您可以在mouseMove事件中检查鼠标位置,并在鼠标在面板外并且按下按钮时调用mouseUp。在MouseMove处理程序中,您可以使用e.X和e.Y来表示位置,并使用e.p oton来表示按钮状态。

当鼠标按钮在控件外部被按下并移动到控件内部时,面板对鼠标没有管辖权,因为当按钮被按下时,鼠标被认为在窗体或任何控件中移动。因此,当鼠标按钮在面板外按下,然后在面板内移动时,您可能会遇到问题。

我认为[mousedraw]做得不好

click = mouseDown + mouseUp 

so,

When mouseDown :  mousedraw = false;
When mouseUp :    mousedraw = true;