ContextMenuStrip 定位点
ContextMenuStrip Location Point
如何在 PictureBox
上的鼠标右键 down/clicked 上以编程方式打开 ContextMenuStrip
?
我只需要在 PictureBox
的 Image
(时间表)的某些区域打开 ContextMenuStrip
,所以我断开了 PictureBox.ContextMenuStrip
属性来自 ContextMenuStrip1
并且我正在手动触发它。这意味着我需要提供一个观点,这似乎非常具有挑战性。
我的问题类似于“”,但我需要同时考虑垂直和水平滚动,但事实并非如此(除非我搞砸了什么)。
所以当我尝试这样的事情时(在 PictureBoxPlan.MouseDown
中):
Dim rpt As Point = Me.PointToClient(PictureBoxPlan.Parent.PointToScreen(e.Location))
...它有一个根本性的缺陷,因为 e.Location
在 Image
的上下文中,无论它如何在 PictureBox
中滚动。我尝试 Form.MouseDown
事件,但当 [right] 单击 PictureBox
.
时,它没有被触发
为了确认,我还需要PictureBox
上下文中的点来分析是否应该显示ContextMenuStrip
并查找关联的ID。
我现在正在尝试使用一些常量(如果 windows“字体大小”设置为非 100%,则可能不起作用)和滚动条值,这根本不是最佳选择。
好的,我在 ContextMenuStrip.Show(Point)
文档中找到了破坏逻辑的地方:
Show(Point)
Positions the `ToolStripDropDown` relative to the specified screen location.
所以令我惊讶的是,ContextMenuStrip 采用 screen 坐标,而不是 Form 坐标。然后我就删除了 PointToClient
并且一切都很好用,无论屏幕上的 window 位置或 Image
容器的滚动条位置如何:
Dim rpt As Point = PictureBoxPlan.PointToScreen(New Point(e.Location.X, e.Location.Y))
无需考虑 PanelPlan.VerticalScroll.Value
或 PanelPlan.HorizontalScroll.Value
。
如何在 PictureBox
上的鼠标右键 down/clicked 上以编程方式打开 ContextMenuStrip
?
我只需要在 PictureBox
的 Image
(时间表)的某些区域打开 ContextMenuStrip
,所以我断开了 PictureBox.ContextMenuStrip
属性来自 ContextMenuStrip1
并且我正在手动触发它。这意味着我需要提供一个观点,这似乎非常具有挑战性。
我的问题类似于“
所以当我尝试这样的事情时(在 PictureBoxPlan.MouseDown
中):
Dim rpt As Point = Me.PointToClient(PictureBoxPlan.Parent.PointToScreen(e.Location))
...它有一个根本性的缺陷,因为 e.Location
在 Image
的上下文中,无论它如何在 PictureBox
中滚动。我尝试 Form.MouseDown
事件,但当 [right] 单击 PictureBox
.
为了确认,我还需要PictureBox
上下文中的点来分析是否应该显示ContextMenuStrip
并查找关联的ID。
我现在正在尝试使用一些常量(如果 windows“字体大小”设置为非 100%,则可能不起作用)和滚动条值,这根本不是最佳选择。
好的,我在 ContextMenuStrip.Show(Point)
文档中找到了破坏逻辑的地方:
Show(Point) Positions the `ToolStripDropDown` relative to the specified screen location.
所以令我惊讶的是,ContextMenuStrip 采用 screen 坐标,而不是 Form 坐标。然后我就删除了 PointToClient
并且一切都很好用,无论屏幕上的 window 位置或 Image
容器的滚动条位置如何:
Dim rpt As Point = PictureBoxPlan.PointToScreen(New Point(e.Location.X, e.Location.Y))
无需考虑 PanelPlan.VerticalScroll.Value
或 PanelPlan.HorizontalScroll.Value
。