2016-04-26 1 views
0

私はC#で腐ったチャートを使っています。スプライン・チャート、クリックしたアイテムの入手方法?

私は、色の変更や隠蔽のようなことをするためにチャート上でクリックされたiten(スプライン)を取得する方法を知りたいと思います。

enter image description here

+0

私は自分で(なぜ私は答えていないのですか)私は決して仕事をしたことはありませんが、チャートコントロールにデフォルトでこれらのイベントがない場合は、マウスクリックイベントを使用して、そこからの位置を確認し、すべてのスプラインパスをチェックして、クリックされた点または近くの点があるかどうかを確認します(正確なピクセル精度は、ユーザーが各スプラインをクリックするのを困難にします)。 –

+0

良いキャッチ;しかし、特にスプライン&ラインチャートでは、データポイント間のすべての部分の値、つまりほとんどの線やカーブの値が欠落するため、HitTestは単純にカットしません。 – TaW

答えて

0

示唆したようにあなた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を隠すか、そのColorHitTestResultを変更している場合は十分です:

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値が返されます。

関連する問題