如何获取ContextMenuStrip的位置?

时间:2017-02-11 16:27:03

标签: c# windows visual-studio

我已将ContextMenuStrip附加到Chart控件。

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

这是我要转换为图表坐标的点:

enter image description here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用回答查询ContextMenuStrip的Opening事件中的当前鼠标光标位置可能会在打开条带时延迟一点,从而导致错误的位置。

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