【问题标题】:How can I get mouse location on a button?如何在按钮上获取鼠标位置?
【发布时间】:2016-10-11 14:38:35
【问题描述】:

VB.NET 视觉工作室

我有几个在运行时添加的按钮,并且我有一个用于单击事件的 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。

如何正确执行此右键单击事件?

【问题讨论】:

  • 你想通过检查位置来检查/捕获什么?
  • 我正在尝试为每个按钮添加上下文菜单。

标签: vb.net winforms


【解决方案1】:

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 控制方法的其他组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多