いつでも選択できる範囲は1つだけです。
だから、あなたは...
範囲..collect
- と
- が..probablyも選択
DataPoints
を収集する必要があります。
- 最後に、選択をクリアするためにUIを決定する必要があります。
カーソル選択に非常に類似したいくつかの選択を、表示するための簡単な方法は、Striplines
を追加し..:ここ
は、上記の結果のためのコードです。値が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
構造をクリアする選択をクリアします。
出典
2016-08-31 11:28:16
TaW