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

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

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

Re[8]: Chartに罫線を引きたいのです。


(過去ログ 121 を表示中)

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

■72395 / inTopicNo.1)  Chartに罫線を引きたいのです。
  
□投稿者/ 沙奈 (5回)-(2014/06/06(Fri) 17:46:35)

分類:[VB.NET/VB2005 以降] 

皆さんに教えて頂いて作ってみたのですが上手く行きません。
全くの初心者ですが教えてください。
ヒントではなく実際のプログラムでお願いします。

Q1,
x1 = CInt(Chart1.ChartAreas(0).AxisX.ValueToPixelPosition(2))などとして、この場合ですと、
"0402" の位置に縦に罫線を引きたいのですが、何故かButton1を2度クッリクしないと罫線が引けません。
これを1度のクリックにするにはどうすれば良いのですか?

Q2,
この例ですと、データは2日間ですが、実際にはもっと多く、しかも日数もその都度増減します。
その影響もあってか、現表示チャートと前表示チャートとで日数が異なった場合、
同じようにValueToPixelPosition(2)などと指定しても、x1の値が的確に反映されず、
現在表示してるローソク足との位置もずれてしまいます。どうすれば良いのですか?

Q3,
罫線をローソク足の背面に引くにはどうすれば良いのですか?


Public Class Form1
    Private keisen As Boolean = False
    Private x1 As Integer
   
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow
        '列の作成
        dt.Columns.Add("日付", GetType(String))
        dt.Columns.Add("高値", GetType(Integer))
        dt.Columns.Add("安値", GetType(Integer))
        dt.Columns.Add("始値", GetType(Integer))
        dt.Columns.Add("終値", GetType(Integer))
        ds.Tables.Add(dt)
        'データのセット
        dtRow = ds.Tables(0).NewRow
        dtRow(0) = "0401"       '日付
        dtRow(3) = 150          '始値
        dtRow(1) = 200          '高値
        dtRow(2) = 100          '安値
        dtRow(4) = 130          '終値
        ds.Tables(0).Rows.Add(dtRow)

        dtRow = ds.Tables(0).NewRow
        dtRow(0) = "0402"       '日付
        dtRow(3) = 150          '始値
        dtRow(1) = 300          '高値
        dtRow(2) = 100          '安値
        dtRow(4) = 250          '終値
        ds.Tables(0).Rows.Add(dtRow)
        '
        Chart1.DataSource = ds
        Chart1.Series.Clear()
        'Y軸の罫線
        Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
        '
        Dim rosoku = Chart1.Series.Add("ローソク足")
        With rosoku
            .ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
            .XValueMember = "日付"
            .YValueMembers = "高値, 安値, 始値, 終値"
            .IsVisibleInLegend = False
        End With
        '------------------------------------
        '該当日の上に罫線を引く
        keisen = True
        x1 = CInt(Chart1.ChartAreas(0).AxisX.ValueToPixelPosition(2))
        Chart1.Invalidate()
    End Sub

    'Chart1上に罫線を引く
    Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
        If keisen Then
            e.ChartGraphics.Graphics.DrawLine(Pens.Black, x1, 0, x1, Chart1.Height)
        End If
    End Sub

End Class

引用返信 編集キー/
■72402 / inTopicNo.2)  Re[1]: Chartに罫線を引きたいのです。
□投稿者/ WebSurfer (285回)-(2014/06/06(Fri) 19:43:18)
No72395 (沙奈 さん) に返信
> ヒントではなく実際のプログラムでお願いします。

それはソフト開発などを生業としている業者に有償で依頼することだと思いますけど・・・
引用返信 編集キー/
■72406 / inTopicNo.3)  Re[2]: Chartに罫線を引きたいのです。
□投稿者/ 沙奈 (6回)-(2014/06/07(Sat) 12:54:57)
No72402 (WebSurfer さん) に返信

これはある恩師に頼まれ自分の勉強も兼ねて善意でやっています。
なのでお金もないので業者のひとには頼めないのです。
すみません。

> ■No72395 (沙奈 さん) に返信
>>ヒントではなく実際のプログラムでお願いします。
>
> それはソフト開発などを生業としている業者に有償で依頼することだと思いますけど・・・
引用返信 編集キー/
■72423 / inTopicNo.4)  Re[3]: Chartに罫線を引きたいのです。
□投稿者/ shu (583回)-(2014/06/09(Mon) 11:52:56)
No72406 (沙奈 さん) に返信

ほとんど同じ質問にどこかで回答したと思うんですが
引用元(参照先)の記述をお願いします。


Q1 => x1の計算はPrePaintイベントで行わないとグラフがまだ存在していないので計算できない。

Q3 => Postでなく、Pre

Q2 => 現表示チャートと前表示チャート これはなんでしょう?
   日数が違った場合、というか線を引く日を変える場合、ValueToPixelPosition(2)の
      2の部分を適切に変更する必要があります。
   

引用返信 編集キー/
■72445 / inTopicNo.5)  Re[4]: Chartに罫線を引きたいのです。
□投稿者/ 沙奈 (10回)-(2014/06/09(Mon) 19:51:16)
No72423 (shu さん) に返信

> ほとんど同じ質問にどこかで回答したと思うんですが
> 引用元(参照先)の記述をお願いします。
>
>
> Q1 => x1の計算はPrePaintイベントで行わないとグラフがまだ存在していないので計算できない。
>
> Q3 => Postでなく、Pre
>
> Q2 => 現表示チャートと前表示チャート これはなんでしょう?
>    日数が違った場合、というか線を引く日を変える場合、ValueToPixelPosition(2)の
> 2の部分を適切に変更する必要があります。
>

すみません。色んな所から引用しましたので、特定した引用元(参照先)とかはないのです。
それに分かり易くと言いますか、結果は同じなのでローソク足のサンプルにしてますが本当はもう少し違うのです。

Q3、教えて頂いたようにPreに変えて上手く行きました。
  ありがとうございます。

Q1、PostPaintをPrePaintに変えただけでは駄目なのですね?
  希望は、1度のButton1クッリクでチャートの描写と、指定した位置に罫線を引きたいのです。   
  しかし何故か、1度目のクッリクではチャートのみが描写。
  2度目のクッリクになって、ようやく指定した位置に罫線が引かれます。
 
Q2、今は簡易にするため、一種類2日分のデータをセットしていますが、実際にはもっと種類もその日数もまちまちです。
  例えば、Aと言う種類のデータは10日、Bと言う種類のデータでは20日などと言った具合です。
  従って、Chart1上に描写するローソク足の本数も、10本になったり20本になったりします。
  ややっこしい説明ですみません。
  たぶんQ1が解決すればこれも解決するような気がします。
 
よろしくお願いします。
   
引用返信 編集キー/
■72449 / inTopicNo.6)  Re[5]: Chartに罫線を引きたいのです。
□投稿者/ shu (586回)-(2014/06/09(Mon) 22:21:53)
No72445 (沙奈 さん) に返信
> Q1、PostPaintをPrePaintに変えただけでは駄目なのですね?
>   希望は、1度のButton1クッリクでチャートの描写と、指定した位置に罫線を引きたいのです。   
>   しかし何故か、1度目のクッリクではチャートのみが描写。
>   2度目のクッリクになって、ようやく指定した位置に罫線が引かれます。
x1の計算をPrePaintのイベントで行うようにしてみてください。(再掲)

 
> Q2、今は簡易にするため、一種類2日分のデータをセットしていますが、実際にはもっと種類もその日数もまちまちです。
>   例えば、Aと言う種類のデータは10日、Bと言う種類のデータでは20日などと言った具合です。
>   従って、Chart1上に描写するローソク足の本数も、10本になったり20本になったりします。
>   ややっこしい説明ですみません。
>   たぶんQ1が解決すればこれも解決するような気がします。
ValueToPixelPosition(2)の2をこの例でどのような意味で指定しているかです。10日なったら何日目のとこに線をひくのか?
20になったら何日目のとこに線を引くのか?を考えてみるとよいと思います。
引用返信 編集キー/
■72476 / inTopicNo.7)  Re[6]: Chartに罫線を引きたいのです。
□投稿者/ 沙奈 (11回)-(2014/06/11(Wed) 00:37:56)
No72449 (shu さん) に返信

的を得てないかもしれませんがお願いします。

Q1、
> x1の計算をPrePaintのイベントで行うようにしてみてください。(再掲)

Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
を、
Private Sub Chart1_PrePaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PrePaint
にはしてみましたがすみません。それ以上は分かりません。


Q2、
> ValueToPixelPosition(2)の2をこの例でどのような意味で指定しているかです。10日なったら何日目のとこに線をひくのか?
> 20になったら何日目のとこに線を引くのか?を考えてみるとよいと思います。

この2はその時に表示したローソク足の該当日付より決めてます。
それは10日分(10本)であっても、20日分(20本)であっても同じで、
罫線を引きたい希望日が 10日分(10本)では、ローソク足の8番目の日付に該当すればValueToPixelPosition(8)になりますし、
20日分(20本)の時には、ローソク足の5番目に該当すればValueToPixelPosition(5)になります。

たぶん、10日分(10本)が8番目で、それよりも多い20日分(20本)が何故5番目と少ない?? などと思われるでしょうが、
ローソク足が構成する要素が日付も含めて違うからです。

症状としては・・、
10日分(10本)に引き続き、同じ10日分(10本)を表示した時には一回目のクリックで正常なx1値になってるようです。
でも、10日分(10本)に引き続き、20日分(20本)などと表示した時には一回目のクリックでは不適値。
二回目のクリックでようやく正常なx1値が得られるようです。
その後は何回クリックしても同じ値のままです。

引用返信 編集キー/
■72477 / inTopicNo.8)  Re[7]: Chartに罫線を引きたいのです。
□投稿者/ shu (588回)-(2014/06/11(Wed) 10:22:25)
No72476 (沙奈 さん) に返信
> Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
> を、
> Private Sub Chart1_PrePaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PrePaint
> にはしてみましたがすみません。それ以上は分かりません。
> 

 
Private Sub Chart1_PrePaint(〜) Handles Chart1.PrePaint
    If keisen Then
        x1 = ・・・
        e.ChartGraphics.Graphics.DrawLine(Pens.Black, x1, 0, x1, Chart1.Height)
    End If
End Sub

引用返信 編集キー/
■72506 / inTopicNo.9)  Re[8]: Chartに罫線を引きたいのです。
□投稿者/ 沙奈 (13回)-(2014/06/12(Thu) 23:14:02)
No72477 (shu さん) に返信

> Private Sub Chart1_PrePaint(〜) Handles Chart1.PrePaint
> If keisen Then
> x1 = ・・・
> e.ChartGraphics.Graphics.DrawLine(Pens.Black, x1, 0, x1, Chart1.Height)
> End If
> End Sub

> x1の計算をPrePaintのイベントで行うようにしてみてください。(再掲)
やっとこの意味が分かりました。
ありがとうございます m(_ _)m

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -