私はC#で腐ったチャートを使っています。スプライン・チャート、クリックしたアイテムの入手方法?
私は、色の変更や隠蔽のようなことをするためにチャート上でクリックされたiten(スプライン)を取得する方法を知りたいと思います。
私はC#で腐ったチャートを使っています。スプライン・チャート、クリックしたアイテムの入手方法?
私は、色の変更や隠蔽のようなことをするためにチャート上でクリックされたiten(スプライン)を取得する方法を知りたいと思います。
示唆したようにあなたは、HitTest
を使用して、クリックされた項目を確認することができます..:
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
// now do what you want with the data..:
if (result.Series != null && result.PointIndex >= 0)
Text = "X = " + result.Series.Points[result.PointIndex].XValue +
" Y = " + result.Series.Points[result.PointIndex].YValues[0];
}
あなたが可能なヒットを示すことができ、ユーザを支援するために:
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
Cursor = result.Series != null ? Cursors.Hand : Cursors.Default;
}
スプライン線を少し大きくすることによってユーザーに好意を与えてください:
もちろんeachOfYourSeries.BorderWidth = 4;
あなたが示すチャートが制御される第1 ..
にズームなしには不可能クリックします今、あなたが望むすべてがSeries
を隠すか、そのColor
HitTestResult
を変更している場合は十分です:
result.Series.Enabled = flase;
または
result.Series.Color = Color.Fuchsia;
しかしclicクリックにアクセスするには、 KED値、それはないかもしれません..:
特にSpline
または
Line
グラフは、唯一の必要
注非常にDataPoints
が自分のラインを作成するために、いくつかの。 HitTest
の結果では不十分です。それは、クリックされたシリーズを教えてくれますし、また最も近いDataPoint
しかし、あなたはまだ値データにピクセルを変換する必要があるかもしれません正しい値で取得します。
ので、代わりのあなたは便利な機能PixelPositionToValue
使用することを好むかもしれHitTest
結果:これは、実際のDataPoints
間のすべての値を取得します
float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);
を。もちろん、Y-値に対して同じ操作を行うことができます。
float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);
注チャート、レイアウトを決定するとビジー状態でないときにのみ、これらの機能を使用することができますを。公式には、これは3つのPaint
イベントのいずれかの間だけです。しかし、実際にはマウスイベントもうまくいきます。グラフが準備できていないときは、null値が返されます。
私は自分で(なぜ私は答えていないのですか)私は決して仕事をしたことはありませんが、チャートコントロールにデフォルトでこれらのイベントがない場合は、マウスクリックイベントを使用して、そこからの位置を確認し、すべてのスプラインパスをチェックして、クリックされた点または近くの点があるかどうかを確認します(正確なピクセル精度は、ユーザーが各スプラインをクリックするのを困難にします)。 –
良いキャッチ;しかし、特にスプライン&ラインチャートでは、データポイント間のすべての部分の値、つまりほとんどの線やカーブの値が欠落するため、HitTestは単純にカットしません。 – TaW