2017-07-19 4 views
0

vb.net windowsフォームアプリケーションでチャートコントロールを使用しています。vb.netチャートを変更するxAxis最大および最小datetime型

私はchart1にデータをロードしています。 /ズーム/ xAxisを再スケール

Chart1.Series("test").XValueType = DataVisualization.Charting.ChartValueType.DateTime 
Chart1.Series("test").YValueType = DataVisualization.Charting.ChartValueType.Int32 

その後、私は変更するTrackbar1コントロールを使用していますが、このコードを使用した:私はこのデータ型を使用しています

Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll 
     ChartRanger(TrackBar1.Value) 
End Sub 

TrackBar1分を持つ= 0とmax =プロパティウィンドウの366

ChartRanger機能は次のように見えますが:

Private Sub ChartRanger(theDays As Integer) 
     Chart1.ChartAreas(0).AxisX.IntervalType = 0 
     Chart1.ChartAreas(0).AxisX.Interval = 0 
     Chart1.ChartAreas(0).AxisX.Minimum = 0 
     Chart1.ChartAreas(0).AxisX.Maximum = theDays 
End Sub 

そこには、デバッグエラーがありません、それは作業のように見えます。ロジックは出力では正しくありません。

すなわち私が達成しようとしている何がアプリのユーザーはminimum日時とchart1X軸ためmaximum日時を定義できるようにすることです。データセットを持つことは、毎日のレコードを含みます。

更新:私は他の関連記事を見て、彼らはASP、VBAの回答を示唆していますが、VB.Netのフォームには答えが見つかりません。ここで最高のロジックのためのより多くの。

答えて

1

あなたの問題はChart1.ChartAreas(0).AxisX.Maximum = theDaysだと思います。 AxisX型はDateTimeを表すDouble型で、theDaysは整数型です。 AxisXの最大日数をtheDaysの値に基づいて計算し、ToOADate()を使用してその日をダブルに変換する必要があります。

ここで働い例です:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Chart1.Series.Clear() 

     Dim s = Chart1.Series.Add("s") 

     s.ChartType = DataVisualization.Charting.SeriesChartType.Point 

     s.XValueType = DataVisualization.Charting.ChartValueType.DateTime 
     s.XValueType = DataVisualization.Charting.ChartValueType.Int32 


     For i As Integer = 0 To 100 
      s.Points.AddXY(Date.Today.AddDays(i), i) 
     Next 

     TrackBar1.Maximum = 100 
    End Sub 

    Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll 
     Dim val As Integer = TrackBar1.Value 
     Chart1.ChartAreas(0).AxisX.Maximum = Date.Today.AddDays(val).ToOADate() 
    End Sub 
End Class 

それとも分を知らないとmaxが既に日付あれば、あなたはトラックバーの位置に軸最大相対を設定することができます。

Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll 

    ' Get min and max dates 
    Dim maxDate As Date = Date.FromOADate(Chart1.Series("s").Points.FindMaxByValue("X").XValue) 
    Dim minDate As Date = Date.FromOADate(Chart1.Series("s").Points.FindMinByValue("X").XValue) 

    ' Get total days between dates 
    Dim totalDays = maxDate.Subtract(minDate).Days 

    ' Get the bar position as a percent of 100 
    Dim barPct As Double = TrackBar1.Value/TrackBar1.Maximum 

    ' Find the maximum day that should be displayed on the plot 
    Dim maxAxisDay As Integer = barPct * totalDays 

    ' Get the date of the maximum day 
    Dim maxAxisDate = minDate.AddDays(maxAxisDay) 

    ' Set maximum. Convert the date to a double using .ToOADate() 
    Chart1.ChartAreas(0).AxisX.Maximum = maxAxisDate.ToOADate() 
End Sub 

編集: トラックバーの最大値がデータセットで表される合計日数に設定されていると仮定すると、少し簡単です。

Private Sub TrackBar1_Scroll_1(sender As Object, e As EventArgs) Handles TrackBar1.Scroll 
     ' Get the first date 
     Dim minDate As Date = Date.FromOADate(Chart1.Series("s").Points.FindMinByValue("X").XValue) 

     ' Assuming that the trackbar has the total number of days represented, the maximum date to display is the first date plus the 
     ' days represented by the trackbar 
     Dim maxDisplayDate As Date = minDate.AddDays(TrackBar1.Value) 

     ' Set the max axis 
     Chart1.ChartAreas(0).AxisX.Maximum = maxDisplayDate.ToOADate() 

    End Sub 
+0

ありがとうございます@LeopoldVonBuschLight、チャートのデータが蓄積されています。すなわち、最大の日付は今日であり、多くの古い日付のデータです。私は最も古いデータの日時を得ることができます – wpcoder

+0

2番目のコードブロックは助けてくれますか? TrackBarのダニは、単日または相対的な位置を表す必要がありますか? – LeopoldVonBuschLight

+0

2番目のブロックは非常に有望に見えます。はい、毎日記録されたデータをチャートにすると仮定します。あなたの努力を感謝し、各ティックのために1日1日、ありがとう – wpcoder

関連する問題