2016-04-21 13 views
1

Ich habe ein Diagramm (myChart) und mehr ChartArea in MyArea, die die ChartAreasCollection ist. Ich muss bestimmen, ob in einem bestimmten ChartArea der Sammlung ein Doppelklick gemacht wird, um sie auszuwählen. Mit dem unten beschriebenen Code hat jeder ChartArea die gleichen Werte für die Grenzen (x, y), so dass die if-Bedingung immer wahr ist, auch wenn der Klick auf den ersten Bereich erfolgte.Ermitteln, welche ChartArea doppelt geklickt wird

Jeder Chartbereich kann sichtbar sein oder nicht. Um diese Funktion nutzen zu können, muss ich mit dem Counter ActiveAreas überprüfen, ob mehr als einer sichtbar ist.

private void chartInForm_DoubleClick(object sender, EventArgs e) 
{ 
    if (ActiveAreas > 1) 
    { 
     Point mouse = ((MouseEventArgs)e).Location; 

     foreach (ChartArea ca in MyArea) 
     { 
      if (mouse.X > ca.Position.X && 
       mouse.X < ca.Position.X + ca.Position.Width * myChart.Width/100 && 
       mouse.Y > ca.Position.Y && 
       mouse.Y < ca.Position.Y + ca.Position.Height * myChart.Height/100) 
      MessageBox.Show(ca.Name); 
     } 

    } 
} 
+0

Ich nehme an, dass Sie das Klickereignis für alle Diagramme in der gleichen Methode fangen, ist das korrekt? – Zalomon

Antwort

0

Dies soll helfen:

private void chartInForm_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    foreach(ChartArea ca in chartInForm.ChartAreas) 
    { 
     if (ChartAreaClientRectangle(chartInForm, ca).Contains(e.Location)) 
     { 
      Console.WriteLine(" You have double-clicked on chartarea " + ca.Name; 
      break; 
     } 
    } 
} 

Der Schlüssel Position.ToRectangleF verwendet, wenn die Pixelpositionen der CAs zu berechnen; es wird das Ergebnis auch zurückbringen, wenn die ChartArea automatisch positioniert ist ..:

RectangleF ChartAreaClientRectangle(Chart chart, ChartArea CA) 
{ 
    RectangleF CAR = CA.Position.ToRectangleF(); 
    float pw = chart.ClientSize.Width/100f; 
    float ph = chart.ClientSize.Height/100f; 
    return new RectangleF(pw * CAR.X, ph * CAR.Y, pw * CAR.Width, ph * CAR.Height); 
} 

Beachten Sie, dass unsichtbare ChartAreas standardmäßig nicht noch werden sie nehmen Platz und die anderen werden an ihrer Stelle bewegen angeklickt werden. Aber wenn Sie feste Positionen setzen, kann diese Änderung ändern und Sie können tatsächlich eine Überprüfung für ca.Visible ...

Verwandte Themen