2017-02-11 3 views
1

Я привязал ContextMenuStrip к элементу управления диаграммой.Как получить местоположение 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); 
Смежные вопросы