如何在按钮上获取鼠标位置?

如何在按钮上获取鼠标位置?

问题描述:

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。

我该如何正确点击右键事件?

+0

你想通过检查位置来检查/陷阱? – Plutonix

+0

我想为每个按钮添加一个上下文菜单。 – xRuhRohx

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)))

或者用PointToClientPointToScreenRectangleToClientRectangleToScreen的控制方法的一些其它组合。