2012-02-13 9 views
1

私は徹底的に検索を使用しましたが、私の問題に対する満足のいく解決策を見つけることができませんでした。windows forms:C#でチャート上に透明なグラフィックを作成

グラフ(datavisualization.charting.chart)を使用してデータ視覚化をプログラミングしました。このグラフは、何らかのシミュレーション結果を示して以来、着実に変化しています。 文脈依存の情報を表示するために、グラフ上にマウスの位置に応じて線を描きたいと思います。

したがって、私は両方のどれも、私はそれを希望とおりに機能しない、2つの実装を試みた:

plotLineは

gGraphを使用して、基礎となるグラフから作成さMouseMove-イベントで呼ばれる:(chartCreateGraphics)を;

protected void plotLine(object sender, System.EventArgs e) 
{ 
    if (this.chart.Series.Count > 0) //ensure that the chart shows data 
    { 
    plotChart(); // this plots the underlying chart 
    penGraph = new Pen(Color.Black); 
    Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0); 
    Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,  
    chart.Location.Y + chart.Size.Height); 
    gGraph.DrawLine(penGraph, point1, point2); 
    penGraph.Dispose();  
    } 
} 

ここで、線はプロットされた直後に消えますが、マウスが移動しない限り、そのままでなければなりません。チャートは新でプロットされていないよう

protected void plotLine(object sender, System.EventArgs e) 
{ 
    penGraph = new Pen(Color.Black); 
    Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0); 
    Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,  
    chart.Location.Y + chart.Size.Height); 
    gGraph.DrawLine(penGraph, point1, point2); 
    penGraph.Dispose();   
} 

はここで、すべてのプロットラインは、限り、グラフィックス面に残ります。 (マウスの位置を示すために最後の行だけを残す必要があります)

誰かが私を助けることができますか?

+0

_gGraphは、下のグラフを使用して作成されます。chart.CreateGraphics(); _これは間違いです。 – TaW

答えて

1

OnPaintイベントを描画する必要があります。あなたは更新モデルを迂回し、そうすることの効果を見ています。もちろん、MouseMoveでいくつかの描画を行いますが、Paintイベントが発生したときには単に消去されます。

コードを最初にOnPaintに配置します。マウスを動かすだけで、必要なデータ(マウスの位置)を記録し、チャートでInvalidate()を呼び出すだけです。そうすると、Paintイベントが呼び出され、描画コードが起動します。

親指のルール;ペイントイベント以外のどこからでも描画することはできません。

+0

不幸にも同じことが起こります... –

+0

OnPaintメソッド内で、元のフォーム(MouseMoveイベントによってInvalidate()を使用して呼び出されます)の描画を行いました。これは前と同じ振る舞いにつながります...私はこの問題を本当に理解していません –

+0

Pre-またはPostPaintでの描画は単なるfneで動作します。グラフィックスのパラメータ__only__を使用してください: 'e.ChartGraphics.Graphics'! – TaW