C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: チャートにゼロクロス線を表示させる


(過去ログ 163 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■94399 / inTopicNo.1)  チャートにゼロクロス線を表示させる
  
□投稿者/ からす (1回)-(2020/04/09(Thu) 22:26:54)

分類:[.NET 全般] 

VB2015を使用しております。

Chart機能を使っていて、X=0とY=0の位置の背景にに水平および垂直なラインを描画したいと考えています。


プリペイントのところにクロスラインの描画のコードを書くと表示することはできました。


    Private Sub Chart1_PrePaint(sender As Object, e As ChartPaintEventArgs) Handles Chart1.PrePaint


        Dim g As Graphics = e.ChartGraphics.Graphics

            g.DrawLine(ZeroCrossLinePen, )
            g.DrawLine(ZeroCrossLinePen, )

    End Sub


しかし、チャートのデータ一つの場合には問題ないのですが、
2つ以上表示させた場合、ゼロクロスラインが一回目(以下のch1)に表示したデータラインの上にオーバーレイしてしまいます。
2回目に表示したライン(ch2)はゼロクロスラインの上にうまく描画されます。

        With vvv Chart1


            .Series.Clear()



            .Series.Add("ch1")


            With .Series("ch1")

                .ChartType = SeriesChartType.Line
                .BorderWidth = 2

                .Color = Color.Red
                .Points.DataBindXY( , )


            End With


                With .Series("ch2")

                    .ChartType = SeriesChartType.Line
                    .BorderWidth = 2

                    .Color = Color.Blue

                    .Points.DataBindXY( , )


                End With


	End With


恐らく、ch1を表示した時にPrePaintが実行され、
更にch2を表示した時にも再度PrePaintが実行されているために、
一回目に表示したラインが下に隠れてしまうのではないかと思います。


一体、どうすれば2本のチャートを表示しても
ゼロクロスラインをうまく表示することができますか?


引用返信 編集キー/
■94402 / inTopicNo.2)  Re[1]: チャートにゼロクロス線を表示させる
□投稿者/ Hongliang (989回)-(2020/04/09(Thu) 23:43:48)
描画物を系列の後ろに表示させたいなら、e.ChartElementがChartAreaのときだけ描画するようにしてみてはどうでしょうか。
VBだとこうかな。
If TypeOf e.ChartElement Is ChartArea Then
引用返信 編集キー/
■94409 / inTopicNo.3)  Re[2]: チャートにゼロクロス線を表示させる
□投稿者/ からす (2回)-(2020/04/10(Fri) 10:56:04)
うまくいきました
どうもありがとうございます。

調べてもこんな情報どこにも出てきませんでしたが
どこで見つけられたのでしょうか?
解決済み
引用返信 編集キー/
■94410 / inTopicNo.4)  Re[3]: チャートにゼロクロス線を表示させる
□投稿者/ Hongliang (990回)-(2020/04/10(Fri) 11:31:03)
2020/04/10(Fri) 11:39:02 編集(投稿者)

ドキュメントであたりをつけて後は試行錯誤、ですかね。

今回の件であれば、以下のような。

1. PrePaint自体が複数回発生しているという事前の推測があった
→ であれば、何を描画しているのかはイベント引数にあるのではないか?
→ docsでChartPaintEventArgsを調べたらChartElementなるプロパティがあった
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.chartpainteventargs?view=netframework-4.8

2. Chartを持ったFormで、PrePaintのイベントハンドラでブレイクポイントを設置
→ 想像通りChartElementにはChartAreaやSeriesなど各種チャートオブジェクトが入ってきてる

3. ChartElementの値に従って描画する内容を変えてみる
→ ChartAreaの時の描画が、各種Seriesの背面に描画された
解決済み
引用返信 編集キー/
■94416 / inTopicNo.5)  Re[4]: チャートにゼロクロス線を表示させる
□投稿者/ からす (3回)-(2020/04/10(Fri) 16:53:14)
なるほどどうもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -