2017-05-31 4 views
0

Ich möchte die Mehrfachauswahl im Diagrammbereich zählen. Als Beispiel kann Benutzer Mehrfachauswahl als dieses Bild, Multiple selected chart .So, wie ich zähle, wie viele Mehrfachauswahl in diesem Diagramm. Dies ist MSchart in Windowsform mit C#.Wie zählen wir, wie viele Mehrfachauswahl im Diagrammbereich?

mein Mehrfachauswahlcode wie folgt;

 SizeF rangeOfCurve = SizeF.Empty; 
     List<SizeF> ranges = new List<SizeF>(); 
     List<int> selectedIndices = new List<int>(); 

     private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e) 
      { 

       ranges.Add(rangeOfCurve); 
       selectedIndices.Union(collectDataPoints(chart1.Series[0],rangeOfCurve.Width, rangeOfCurve.Height)).Distinct(); 

       StripLine sl = new StripLine(); 
       sl.BackColor = Color.FromArgb(255, Color.LightSeaGreen); 
       sl.IntervalOffset = Math.Min(rangeOfCurve.Width, rangeOfCurve.Height); 
       sl.StripWidth = Math.Abs(rangeOfCurve.Height - rangeOfCurve.Width); 
       chart1.ChartAreas[0].AxisX.StripLines.Add(sl);   

      } 
      List<int> collectDataPoints(Series s, double min, double max) 
      { 
       List<int> hits = new List<int>(); 
       for (int i = 0; i < s.Points.Count; i++) 
        if (s.Points[i].XValue >= min && s.Points[i].XValue <= max) hits.Add(i);   
       return hits; 
      } 

     private void chart1_SelectionRangeChanging(object sender, CursorEventArgs e) 
      { 

       rangeOfCurve = new SizeF((float)e.NewSelectionStart, (float)e.NewSelectionEnd); 
      } 

Dies ist mein Code für den Export hier diese ausgewählten Daten in neue CSV-file.In I Schaltfläche Click-Ereignis dann Bereichsdaten ausgewählt hinzugefügt eine andere CSV zu exportieren file.but ich sagen möchte, kann ich mehrere Auswahl hinzufügen im Diagrammbereich, aber die Daten werden nur für den zuletzt ausgewählten Teil exportiert.wie kann ich alle Mehrfachselektionsdaten erhalten.Dies ist Code zum Abrufen von ausgewählten Bereichsdaten in eine andere CSV-Datei.

private void btnExport_Click(object sender, EventArgs e) 
{ 
    List<Graph> ObservingData = new List<Graph>(); // List to store all available Graph objects from the CSV 
    int index = 0; 
    using (StreamWriter sw = new StreamWriter(@"D:\CSVFile\NEWFile\Export\NewFile.csv")) 
    { 
     // Loops through each lines in the CSV 
     foreach (string line in System.IO.File.ReadAllLines(pathToCsv)) 
     { 
      // here line stands for each line in the csv file 
      string[] CsvLine = line.Split(','); 

      // creating an object of type Graph based on the each csv line 
      // and adding them to the List<Graph> 
      Graph Instance1 = new Graph(); 

      if (index == 0) 
      { 
       sw.WriteLine(line); 
      }  
      else 
      { 
       //Add the code here..** 
        if (((chart1.ChartAreas[0].CursorX.SelectionStart))<=index && (index<= (chart1.ChartAreas[0].CursorX.SelectionEnd))) 
       { 
        sw.WriteLine(line); 
       }      
      } 
      index++; 
     } 
     sw.Close(); 
    } 
    MessageBox.Show("Data are copied to the new .CSV file"); 
} 

Wenn Sie irgendeine Hilfe geben können, um dies zu lösen.Ich bin so sehr dankbar für Sie.

+0

Sie können die Bandleitungen Sammlung aufzählen und testen Sie die Eigenschaften der einzelnen. Willst du Infos über die Stripline (die übrigens nicht 'Selektionen' sind) oder über die DataPoints? – TaW

+0

@ TaW.Ich bin Anfänger für diese Sprache.So bitte geben Sie mir eine Hilfe, um dies zu lösen.Ich möchte mehrere Auswahl auf dem Diagramm zeigen, und ich möchte diese multi ausgewählten Datenpunkte in .csv-Datei, die ich.so ich Ich möchte einen ausgewählten Datenbereich mit 'chart1.ChartAreas [0] .CursorX.SelectionStart' und 'chart1.ChartAreas [0] .CursorX.SelectionEnd' ermitteln, aber ich kann nicht multi bekommen ausgewählten Bereich eins nach dem anderen.So bitte geben Sie mir irgendeine Hilfe dafür. – SNP

+0

Es kann nur einen Cursor für eine Achse geben und daher nur eine Auswahl, die Sie auf diese Weise erstellen können. Streifenlinien sind auch nicht der einfachste Weg, um eine Auswahl zu erstellen. - Siehe den Link für ein Beispiel, das nur Mausereignisse verwendet, um mehrere Auswahlen zu erstellen! Fühlen Sie sich frei zu fragen, wenn Sie Fragen haben! – TaW

Antwort

0

Angenommen, Sie haben StripLines hinzugefügt Auswahl zu markieren, hier ist ein Beispiel dafür, wie man die DataPoints von diesen StripLines sammeln können:

Lassen Sie uns eine Liste List<> von Punkt erstellen:

selectionPoints = new List<List<DataPoint>>(); 

Jetzt können wir sammeln die DataPoints wie folgt aus:

List<List<DataPoint>> GetSelectedPoints(ChartArea ca, Series S) 
{ 
    selectionPoints = new List<List<DataPoint>>(); 

    foreach (var sl in ca.AxisX.StripLines) 
    { 
     List<DataPoint> points = new List<DataPoint>(); 
     points = S.Points.Select(x => x) 
        .Where(x => x.XValue >= sl.IntervalOffset 
          && x.XValue <= (sl.IntervalOffset + sl.StripWidth)).ToList(); 

     selectionPoints.Add(points); 
    } 
    return selectionPoints; 
} 

Und jetzt ca wir n Dinge tun, mit der DataPoints wie Farbe, um sie ..:

foreach (var pointList in selectionPoints) 
{ 
    foreach (var dp in pointList) dp.Color = Color.Red; 
} 

.. oder exportieren:

string filePath = "D:\\demo.csv"; 
StringBuilder sb = new StringBuilder(); 
foreach (var pointList in selectionPoints) 
{ 
    foreach (var dp in pointList) 
     sb.Append(dp.XValue + "," + dp.YValues[0] + ";"); // pick your format! 
} 
File.WriteAllText(filePath, sb.ToString()); 
Verwandte Themen