|
■No78818 (shu さん) に返信
ありがとうございます。
> 出来ていたことなのでしょうか?出来ていることは出来ていることで最初から提示された方がよいかと
> 思います。
Chart1.ChartAreas(0).AxisY.LabelStyle.Format = "#,###".PadLeft(6)
などでも出来てはいます。
でももっと良い方法があれば教えて頂きたいです。
> まずは試した事を提示された方がよいです。
間違いがあるかもしれませんが下記のが今までのChartです。
ここでの要点はスクロールとマウスの移動と共に引かれる罫線です。
これと同じようなことが教えて頂いた78809でも出来れば嬉しいです。
Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form1
Private dat1(6) As String
Private dat2(6) As Single
Private datS As Integer
Private posi0 As Double = 1 'Chart1の移動後の横スクロール位置
Private posi1 As Double = 1 'Chart1の移動前の横スクロール位置
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'日付と数量のデータ
dat1(0) = "0101" : dat1(1) = "0102" : dat1(2) = "0103" : dat1(3) = "0104" : dat1(4) = "0105" : dat1(5) = "0106"
dat2(0) = "40" : dat2(1) = "20" : dat2(2) = "80" : dat2(3) = "50" : dat2(4) = "70" : dat2(5) = "0"
datS = 6
'チャート表示
Call ChartHyoji()
End Sub
'チャート表示
Private Sub ChartHyoji()
Dim ds As New DataSet
Dim dt As New DataTable
Dim dtRow As DataRow
'列の作成
dt.Columns.Add("日付", GetType(String))
dt.Columns.Add("数量", GetType(Single))
ds.Tables.Add(dt)
'データのセット
For i = 0 To datS
dtRow = ds.Tables(0).NewRow
dtRow(0) = dat1(i) '日付
dtRow(1) = dat2(i) '数量
ds.Tables(0).Rows.Add(dtRow)
Next
'Chartに表示するデータソースを設定
Chart1.DataSource = ds
'系列を初期化
Chart1.Series.Clear()
'グラフの種類の設定
Dim bou = Chart1.Series.Add("折れ線")
With bou
.ChartType = DataVisualization.Charting.SeriesChartType.Line
.XValueMember = "日付"
.YValueMembers = "数量"
.IsVisibleInLegend = False
End With
'横スクロールバーの表示と設定
Dim sv As AxisScaleView = Chart1.ChartAreas(0).AxisX.ScaleView
With sv
.SmallScrollSize = 1 ' ボタンクリック時のスクロール量
.Position = posi0 ' スクロールバーの初期位置
.Size = 2 ' 1画面に表示するデータ数
If posi0 = 1 Then
.Position = (datS - .Size) + 1 ' スクロールバーをデータの最終に
End If
End With
'Y軸用の最低数と最高数を算出
Dim MinSuu As Integer = 999999
Dim MaxSuu As Integer = 0
For j As Integer = CInt(posi0 - 1) To CInt(posi0 + sv.Size - 1)
If MinSuu > dat2(j) Then '最低数
MinSuu = dat2(j)
End If
If MaxSuu < dat2(j) Then '最高数
MaxSuu = dat2(j)
End If
Next
'Y軸の設定
Chart1.ChartAreas(0).AxisY.Minimum = MinSuu
Chart1.ChartAreas(0).AxisY.Maximum = MaxSuu
Chart1.ChartAreas(0).AxisY.Interval = 10 '目盛りの間隔
End Sub
'Chart1の横スクロールバーの位置を求める
Private Sub Chart1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Chart1.Paint
Dim sv As AxisScaleView = Chart1.ChartAreas(0).AxisX.ScaleView
posi0 = sv.Position
If Double.IsNaN(posi0) Then
posi0 = 1 '初期ポジション
End If
If posi1 <> posi0 Then 'スクロール時のみChartを書き換え
Call ChartHyoji()
posi1 = posi0
End If
End Sub
'マウス処理
Private mp As Point
Private Sub Chart1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseMove
mp = e.Location
Chart1.Invalidate()
End Sub
'x軸とy軸が交差する罫線を引く
Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs) Handles Chart1.PostPaint
Dim gg = e.ChartGraphics.Graphics
Dim ax = Chart1.ChartAreas(0).AxisX
Dim ay = Chart1.ChartAreas(0).AxisY
Dim x1 = ax.ValueToPixelPosition(ax.Minimum) 'グラフ領域左端のX座標
Dim y1 = ay.ValueToPixelPosition(ay.Maximum) 'グラフ領域上部のY座標
Dim x2 = ax.ValueToPixelPosition(ax.Maximum) 'グラフ領域右端のX座標
Dim y2 = ay.ValueToPixelPosition(ay.Minimum) 'グラフ領域下部のY座標
gg.DrawLine(Pens.Gold, mp.X, CInt(y1), mp.X, CInt(y2)) ' x軸の罫線を引く
gg.DrawLine(Pens.Gold, CInt(x1), mp.Y, CInt(x2), mp.Y) ' y軸の罫線を引く
'※本当はグラフ外に出れば罫線が引かれないようにもしたいのですが対応が出来てません。
End Sub
End Class
|