タイトル : Re^2: Chartオブジェクトで特定のシリーズを消す方法(半解決?) 投稿日 : 2016/03/16(Wed) 16:34 投稿者 : shu
series3,4をLoadの中で作成して Enabledを切り替えればよいかと思います。 Public xval() As Double Public yval() As Double Public yval2() As Double Private series3 As Series Private series4 As Series Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' x値の配列を宣言 xval = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0} ' y値の配列を宣言 yval = {8.3, 8.2, 10, 1.5, 1.8, 5.2, 2.5, 0, 5.0, 7.7, 1.0, 7.5, 8, 7, 0.9, 2.5, 2.8, 5.5, 4.6, 3.1, 10} ' y2値の配列を宣言 yval2 = {50, 12, 30, 40, 26, 30, 0, 30, 28, 20, 40, 30, 50, 35, 40, 30, 28, 40, 10, 30, 50} 'デフォルトのグラフを抹消 Chart1.Series.Clear() 'データ列”series”を宣言する。 Dim series1 As New Series() Dim series2 As New Series() Dim n As Integer = 0 'For-Nextで配列の値をデータ列series”に読み込む For Each i In xval series1.Points.AddXY(i, yval(n)) series2.Points.AddXY(i, yval2(n)) n = n + 1 Next 'chart表示 Chart1.Series.Add(series1) Chart1.Series.Add(series2) 'チャートエリア内のX領域をカーソルで取得可能に設定(ズームイン) 'Chart1.ChartAreas(0).CursorX.IsUserEnabled = True 'チャートX領域の選択 'Chart1.ChartAreas(0).CursorX.IsUserSelectionEnabled = True 'Xカーソル表示 With series1 .MarkerSize = 10 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 1 .MarkerColor = Color.Blue .ChartType = SeriesChartType.Point .YAxisType = AxisType.Primary '第1軸 End With With series2 .MarkerSize = 10 .MarkerStyle = MarkerStyle.Circle .MarkerBorderColor = Color.Black .MarkerBorderWidth = 1 .MarkerColor = Color.Red .ChartType = SeriesChartType.Point .YAxisType = AxisType.Secondary '第2軸 End With series3 = New Series() With series3 .MarkerSize = 1 .MarkerStyle = MarkerStyle.Square .MarkerBorderColor = Color.Black .MarkerBorderWidth = 1 .MarkerColor = Color.Blue .ChartType = SeriesChartType.Point .LegendText = "始点" .Enabled = False End With Chart1.Series.Add(series3) series4 = New Series() With series4 .MarkerSize = 1 .MarkerStyle = MarkerStyle.Square .MarkerBorderColor = Color.Black .MarkerBorderWidth = 1 .MarkerColor = Color.Red .ChartType = SeriesChartType.Point .LegendText = "終点" .Enabled = False End With Chart1.Series.Add(series4) 'チャートのY軸をシリーズ1,2のMIN〜MAX範囲とする With Chart1.ChartAreas(0) With .AxisY .Minimum = yval.Min .Maximum = yval.Max End With With .AxisY2 .Minimum = yval2.Min .Maximum = yval2.Max End With .AxisY2.Enabled = AxisEnabled.True End With With Chart1 .Series(0).LegendText = "DMM計測 抵抗値(kΩ)" .Series(1).LegendText = "換算温度(℃)" End With End Sub Private Sub Chart1_MouseClick(sender As Object, e As MouseEventArgs) Handles Chart1.MouseClick Dim frgElement As Boolean 'クリック毎のフラグ Dim SeriesNo As Integer 'シリーズ要素 frgElement = Not frgElement 'クリック毎にフラグを設定 'クリックした位置の要素を取得 Dim htrResult As HitTestResult = Chart1.HitTest(e.X, e.Y) If htrResult.ChartElementType = ChartElementType.DataPoint And frgElement = True Then Dim i As Integer = htrResult.PointIndex Dim dp As DataPoint = htrResult.Series.Points(i) For j As Integer = 0 To Chart1.Series.Count - 1 If Chart1.Series(j).Name = htrResult.Series.Name Then SeriesNo = j 'シリーズ要素 frgElement = Not frgElement Exit For End If Next 'クリックした場所の取得 Start_Line(SeriesNo, i) 'ライン描画へ(シリーズ要素、X軸) End If End Sub Private Sub Start_Line(sr As Double, st As Integer) Select Case sr 'シリーズ判定 Case 0 'シリーズ1のポイントにマウスを当てた時 series3.Points.Clear() series3.Enabled = True series4.Enabled = False series3.LegendText = "始点" 'ライン引き For n = Chart1.ChartAreas(0).AxisY.Minimum To Chart1.ChartAreas(0).AxisY.Maximum Step 0.001 series3.Points.AddXY(xval(st), n) Next n 'シリーズ3を引くとチャートが自動で変わるので、チャートのY軸をシリーズ1,2のMIN〜MAX範囲とする With Chart1.ChartAreas(0) With .AxisY .Minimum = yval.Min .Maximum = yval.Max End With With .AxisY2 .Minimum = yval2.Min .Maximum = yval2.Max End With End With Case 1 'シリーズ2のポイントにマウスを当てた時 series4.Points.Clear() series3.Enabled = False series4.Enabled = True 'ライン引き For n = Chart1.ChartAreas(0).AxisY.Minimum To Chart1.ChartAreas(0).AxisY.Maximum Step 0.001 series4.Points.AddXY(xval(st), n) Next n 'シリーズ4を引くとチャートが自動で変わるので、チャートのY軸をシリーズ1,2のMIN〜MAX範囲とする With Chart1.ChartAreas(0) With .AxisY .Minimum = yval.Min .Maximum = yval.Max End With With .AxisY2 .Minimum = yval2.Min .Maximum = yval2.Max End With .AxisY2.Enabled = AxisEnabled.True End With End Select End Sub |