如何在按钮上获取鼠标位置?
问题描述:
VB.NET Visual Studio如何在按钮上获取鼠标位置?
我有几个按钮,我在运行时添加,并且我有一个Click事件的MouseDown事件处理程序。左键单击工作得很好,但右键单击事件触发,但没有做我需要的事情。
If e.Button = Windows.Forms.MouseButtons.Right Then
If sender.Bounds.Contains(e.Location) = True Then
ContextMenuStrip.Show(Cursor.Position)
End If
End If
我缩短了这一点,使其更易于阅读。
当我看着e.Location时,它显示了鼠标相对于按钮的位置。 因此,如果我的按钮在400,600处,鼠标的位置应该在该区域,但鼠标位置会返回20,30,因为它位于按钮内部20,30。
我该如何正确点击右键事件?
答
MouseDown
当鼠标停在您的控件上时,事件会引发,因此鼠标一定在您的控制范围内,您无需检查该按钮是否包含e.Location
。
要显示上下文菜单条,如果将上下文菜单条分配给控件的ContextMenuStrip
属性,则不需要执行任何操作,菜单将自动显示。但是,如果因任何原因要处理MouseDown
事件,您可以使用这些选项之一:
ContextMenuStrip1.Show(DirectCast(sender, Control), e.Location)
ContextMenuStrip1.Show(MousePosition)
注:只是为了学习的目的,如果您要检查是否在您的按钮e.Location
,您可以使用以下任一选项:
Button1.ClientRectangle.Contains(e.Location)
Button1.Bounds.Contains(Button1.Parent.PointToClient(Button1.PointToScreen(e.Location)))
或者用PointToClient
,PointToScreen
,RectangleToClient
,RectangleToScreen
的控制方法的一些其它组合。
你想通过检查位置来检查/陷阱? – Plutonix
我想为每个按钮添加一个上下文菜单。 – xRuhRohx