如果单击鼠标按钮,C#mouseleave和mouseenter事件将不会触发

时间:2011-08-27 23:29:31

标签: c# winforms mouseevent

标题说明了一切。我有一个充当白板的面板。在鼠标移动时绘制鼠标轨道..工作正常,但如果鼠标离开面板边缘,我想调用鼠标向上事件和鼠标按下事件如果鼠标离开单击左键单击

时,进入面板
 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。

问题是:

如果鼠标按钮关闭,则不会触发离开和输入事件。

2 个答案:

答案 0 :(得分:7)

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

如果您可以在应用程序中使用此行为,那么它将是一个更“标准”的用户界面。

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

当鼠标按钮在控件外部按下并移到内部时,面板对鼠标没有管辖权,因为鼠标被认为是按下按钮时的形式或控制中的移动。因此,当您在面板外按下鼠标按钮然后在面板内移动鼠标按钮时,可能无法触发mouseDown。

答案 1 :(得分:0)

我不认为[mousedraw]会做得很好

click = mouseDown + mouseUp 

所以,

When mouseDown :  mousedraw = false;

When mouseUp :    mousedraw = true;