tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: スクロールに合わせY軸の目盛りに
投稿日: 2014/02/16(Sun) 17:34
投稿者ゆか
VBレスキュー(花ちゃん) 様
ありがとうございます。

教えていただいたこと早速やってみました。
動作確認では上手く行ったのですが移植してみると
d1(Ncount) = CDbl(ds.Tables(0).Rows(i).Item(J))
の部分で、
「IndexOutOfRangeExceptionはハンドルされてませんでした。」
「テーブル0が見つかりません。」
が出てしまいます。

ちなみに GoTo Test を有効にしますとエラーは出ませんし、スクロールも正常に働きます。

質問の仕方が凄く幼稚ですみませんが、こんな内容で分るようでしたらお願いします。


Imports System.Windows.Forms.DataVisualization.Charting

Public Class Form1
    Private spos As Double = 0

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        Dim colums As Integer
        Using cn As New System.Data.OleDb.OleDbConnection
            '  Dim csvFileName As String = "【2014年02月15日9時00現在の全国各地の気温】.csv"
            Dim csvFileName As String = "kion.csv"

            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath() & _
                  ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited"""
            Using da As System.Data.OleDb.OleDbDataAdapter = _
                 New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & csvFileName, cn)
                da.Fill(ds, "Table1")
                Chart1.DataSource = ds            'Chart に表示するデータソースを設定
                colums = ds.Tables(0).Columns.Count - 1   'データの系列数を取得
            End Using
        End Using

        With Chart1
            .Titles.Clear()         'タイトルの初期化
            .Series.Clear()         '系列(データ関係)の初期化
        End With

        '
        With Chart1
            '============== 実際のプリグラムではこの箇所で表示をしています ===============
            For i As Integer = 1 To colums
                'データベースから列名を読込(現在の気温・昨日同時刻の気温 等)
                Dim columnName As String = ds.Tables(0).Columns(i).ColumnName.ToString()
                '系列の設定(現在の気温・昨日同時刻の気温 等)
                .Series.Add(columnName)
                'X 軸のラベルテキストの読込・設定(都市・県名)
                .Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString()
                'グラフ用のデータの読込・設定(各温度)
                .Series(columnName).YValueMembers = columnName
            Next
            '============================================================================

            '■------------------- 横・スクロールバーを表示 ----------------Start--■
            Dim sv As AxisScaleView = Chart1.ChartAreas(0).AxisX.ScaleView
            Dim sh As AxisScaleView = Chart1.ChartAreas(0).AxisY.ScaleView
            With sv
                .SmallScrollSize = 1  ' ボタンクリック時のスクロール量
                '.Position = 1        ' スクロールバーの初期位置
                .Position = spos      ' スクロールバーの初期位置
                .Size = 8        ' 1画面に表示するデータ数(データ数に対する割合で指定する)
            End With

            GoTo Test

            '-------------- スクロールに合わせてメモリの最大値と最小値を変更 -------------
            '現在表示されているデータの最大値と最小値を求める
            Dim d1() As Double = Nothing
            Dim Ncount As Integer = -1
            For i As Integer = CInt(spos) To CInt(spos + sv.Size - 1)  '  sv.Size
                For J As Integer = 1 To colums
                    Ncount += 1
                    ReDim Preserve d1(Ncount)
                    d1(Ncount) = CDbl(ds.Tables(0).Rows(i).Item(J))
                Next
            Next
            Dim dMax As Double = 0
            Dim dMin As Double = 0

            dMax = 5 * (CInt(CLng(d1.Max) \ 5) + 1)   '目盛りの最大値を求める

            '目盛りの最小値を求める
            If d1.Min >= 0 Then
                dMin = 0    '最小値を 0 にしたい場合
            Else
                dMin = d1.Min
                '目盛りの最大値をデータの最大値 + 5(データに合わせて)に設定
                dMin = 5 * (CInt(CLng(d1.Min) \ 5) - 1)
            End If

            With Chart1.ChartAreas(0).AxisY
                .Maximum = dMax    '目盛りの最大値
                .Minimum = dMin    '目盛りの最小値
                .Interval = 2      'メモリ間隔
            End With

Test:
        End With
    End Sub

    Private Sub Chart1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Chart1.Paint
        'スクロールの位置を求める
        Dim sv As AxisScaleView = Chart1.ChartAreas(0).AxisX.ScaleView
        spos = sv.Position
        If Double.IsNaN(spos) Then
            spos = 0
        End If
        Button1.PerformClick()
    End Sub

End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。