2017-02-11 97 views
1

我已将一个ContextMenuStrip附加到Chart控件。如何获取ContextMenuStrip的位置?

如何获取ContextMenuStrip左上角出现的图表控件坐标?

这是我想翻译到图表的点坐标:

enter image description here

+2

很不清楚你的意思或为什么它很重要。使用控件的PointToClient()方法映射到图表控件的坐标。或者可能是Axis.PixelPositionToValue()映射到图表轴。不要让我们猜测。 –

+0

我希望能够在点击的位置插入标记。 –

+0

PointToClient解决了它:-)我想:-( –

回答

0

使用应答查询中的ContextMenuStrip的开幕活动可以提供错误的当前鼠标光标位置打开条时的位置会稍微延迟一点。

如果您需要真正点击的位置,请从控件的属性中删除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是相对于控件的光标位置。

+0

谢谢你,这是一个很好的解决方案。 –

0

我添加了一个ContextMenuStrip_Opening事件到的ContextMenuStrip。在那里我可以保存菜单的弹出位置。

我做了这样的事情:

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);