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