标题说明了一切。我有一个充当白板的面板。在鼠标移动时绘制鼠标轨道..工作正常,但如果鼠标离开面板边缘,我想调用鼠标向上事件和鼠标按下事件如果鼠标离开或单击左键单击
时,进入面板 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。
问题是:
如果鼠标按钮关闭,则不会触发离开和输入事件。
答案 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;