2017-02-11 98 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);