如何获取 ContextMenuStrip 的位置?
Posted
技术标签:
【中文标题】如何获取 ContextMenuStrip 的位置?【英文标题】:How to get the location of ContextMenuStrip? 【发布时间】:2017-06-29 21:59:14 【问题描述】:我已将 ContextMenuStrip 附加到 Chart 控件。
如何获取 ContextMenuStrip 出现时左上角所在的图表控件坐标?
这是我要转换为图表坐标的点:
【问题讨论】:
很不清楚你的意思或它为什么重要。使用控件的 PointToClient() 方法映射到图表控件的坐标。或者也许 Axis.PixelPositionToValue() 映射到图表轴。不要让我们猜测。 我希望能够在我点击的地方插入一个标记。 PointToClient 解决了它:-) 我想 :-( 【参考方案1】:在ContextMenuStrip的Opening事件中使用答案查询当前鼠标光标位置,会在打开strip有点延迟时传递错误的位置。
如果你需要真正点击的位置,从控件的属性中移除 ContextMenuStrip 并在控件的 MouseDown 事件中手动打开上下文菜单。在那里您可以访问实际的点击位置。
private void panel1_MouseDown(object sender, MouseEventArgs e)
if(e.Button == MouseButtons.Right)
var relativeClickedPosition = e.Location;
var screenClickedPosition = (sender as Control).PointToScreen(relativeClickedPosition);
contextMenuStrip1.Show(screenClickedPosition);
relativeClickedPosition
是光标相对于控件的位置。
【讨论】:
【参考方案2】:我向 ContextMenuStrip 添加了一个 ContextMenuStrip_Opening 事件。在那里我可以保存菜单弹出位置。
我做了这样的事情:
menuPopupLocation = chart.PointToClient(System.Windows.Forms.Cursor.Position);
那么我可以使用:
double dataX = chart.ChartAreas[0].AxisX.PixelPositionToValue(menuPopupLocation.X);
double dataY = chart.ChartAreas[0].AxisX.PixelPositionToValue(menuPopupLocation.Y);
【讨论】:
以上是关于如何获取 ContextMenuStrip 的位置?的主要内容,如果未能解决你的问题,请参考以下文章
C#Winform中如何获取contextMenuStrip弹出的父控件的相关信息
contextmenustrip 通过二级菜单的点击 怎么获取当前关联控件,是二级菜单,不是一级菜单。