ContextMenuStrip定位点

问题描述

如何以编程方式在鼠标右键上的鼠标光标上打开ContextMenuStrip或在PictureBox上单击鼠标?


我仅需要在ContextMenuStripImage(计划)的某些区域中打开PictureBox,所以我将PictureBox.ContextMenuStrip属性与{{1} },而我手动将其触发。这意味着我需要提供一个观点,这似乎令人惊讶。

我的问题类似于“ How to get location of ContextMenuStrip”,但我需要考虑垂直和水平滚动,但这不是必须的(除非我弄乱了东西)。

因此,当我尝试这样的操作(在ContextMenuStrip1中)时:

PictureBoxPlan.MouseDown

...它有一个根本的缺陷,因为Dim rpt As Point = Me.PointToClient(PictureBoxPlan.Parent.PointToScreen(e.Location)) e.Location的上下文中,而不管它如何在Image中滚动。我尝试进行PictureBox事件,但是当[右键]单击Form.MouseDown时,事件没有被触发。

为进行确认,我仍然需要PictureBox上下文中的点来分析是否应显示PictureBox并查找关联的ID。

我现在正尝试将一些常量(如果将窗口“字体大小”设置为100%以外的其他值)和滚动条值一起使用,这根本不是最佳选择。

解决方法

好的,我在ContextMenuStrip.Show(Point)文档中发现了破坏逻辑的内容:

Show(Point)   
Positions the `ToolStripDropDown` relative to the specified screen location.

因此,令我惊讶的是,ContextMenuStrip采用的是 screen 坐标,而不是 Form 坐标。然后,我只是移除了PointToClient,不管屏幕上的窗口位置还是Image容器的滚动条位置,一切都可以作为一种魅力:

Dim rpt As Point = PictureBoxPlan.PointToScreen(New Point(e.Location.X,e.Location.Y))

无需考虑PanelPlan.VerticalScroll.ValuePanelPlan.HorizontalScroll.Value

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...