2016-08-27 8 views
1

データ型の列にチャートで表示された簡単なWindowsFormAplicationを作成しようとしています。グラフの複数のセクションをcで選択する#

ここでは、チャートの一部を選択し、同じデータセットから同じ番号を見つけて、SAMEチャートですべて選択することを考えています。私のプログラムは、そのチャート上に複数の選択肢を表示する必要があるところまで、それだけです。

データを選択する方法が1つしか見つかりませんでした。これは、 を使用しています。Cursor.SetSelectionPosition(double、double); 複数選択のオプションがないようです。

これは標準のチャートでも可能ですか? これをC#でどのように達成するかについてのご意見は、大変ありがとうございます。

答えて

2

いつでも選択できる範囲は1つだけです。

だから、あなたは...

    範囲..collect
  • が..probablyも選択DataPointsを収集する必要があります。
  • 最後に、選択をクリアするためにUIを決定する必要があります。

カーソル選択に非常に類似したいくつかの選択を、表示するための簡単な方法は、Striplinesを追加し..:ここ

enter image description here

は、上記の結果のためのコードです。値がfloatに収まると想定し、SizeF構造体を乱用して選択範囲の開始値と終了値を格納することに注意してください。あなたがより正確になりたい場合は、Tuple<double, double>に置き換えることができます..:

まず3級レベルの変数は、データ、継続的な選択、範囲のリストとDataPointインデックスのリストを保持する:

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

このイベントは、PARAM eに新たな選択肢を保持しているので、我々はそれらを格納することができます:今、選択プロセスが実行され

private void chart1_SelectionRangeChanging(object sender, CursorEventArgs e) 
{ 
    curRange = new SizeF((float)e.NewSelectionStart, (float)e.NewSelectionEnd); 
} 

。選択データは今は失われていますが、保存されています。だから我々は、新しい範囲を追加し、新たに選択されたDataPoint指標を収集し、最終的に作成し、表示することができStripLine新しい:

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; 
} 

へ:この小さなルーチンは範囲内のすべてのDataPoint指標を収集する必要があり

private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e) 
{ 
    ranges.Add(curRange); 
    selectedIndices.Union(collectDataPoints(chart1.Series[0], 
          curRange.Width, curRange.Height)) 
        .Distinct(); 

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

2つのリスト、StripLinesコレクション、およびcurRange構造をクリアする選択をクリアします。

関連する問題