2017-02-11 6 views
1

Ich habe einen ContextMenuStrip an ein Chart-Steuerelement angefügt.Wie bekomme ich den Speicherort von ContextMenuStrip?

Wie kann ich die Diagrammsteuerkoordinaten erhalten, wo die obere linke Seite des ContextMenuStrip befindet, wenn es angezeigt wird?

Dies ist der Punkt, den ich Diagramm übersetzen Koordinaten:

enter image description here

+2

Ziemlich unklar, was du meinst oder warum es wichtig ist. Verwenden Sie die PointToClient() -Methode des Steuerelements, um den Koordinaten des Diagrammsteuerelements zuzuordnen. Oder vielleicht Axis.PixelPositionToValue(), um einer Diagrammachse zuzuordnen. Lass uns nicht raten. –

+0

Ich möchte an der Stelle, an der ich geklickt habe, eine Markierung einfügen können. –

+0

PointToClient hat es gelöst :-) Ich dachte :-( –

Antwort

0

die Antwort Mit der aktuellen Position des Mauszeigers in der Eröffnungsveranstaltung des Context abfragen kann die falsche liefern Position beim Öffnen des Streifens ist ein bisschen verzögert.

Wenn Sie die wirklich angeklickte Position benötigen, entfernen Sie den ContextMenuStrip aus der Eigenschaft des Steuerelements, und öffnen Sie das Kontextmenü im MouseDown-Ereignis des Steuerelements manuell. Dort haben Sie Zugriff auf die tatsächliche Klickposition.

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 ist die Cursorposition relativ zu der Kontrolle.

+0

Danke, das war eine gute Lösung. –

0

ich ein ContextMenuStrip_Opening Ereignis der Context hinzugefügt. Dort könnte ich den Menü-Popup-Speicherort speichern.

Ich habe so etwas wie dies:

menuPopupLocation = chart.PointToClient(System.Windows.Forms.Cursor.Position); 

dann könnte ich verwenden:

double dataX = chart.ChartAreas[0].AxisX.PixelPositionToValue(menuPopupLocation.X); 
double dataY = chart.ChartAreas[0].AxisX.PixelPositionToValue(menuPopupLocation.Y); 
Verwandte Themen