タイトル : Re^2: Chartオブジェクトで特定のシリーズを消す方法(解決) 投稿日 : 2016/03/30(Wed) 19:30 投稿者 : 食う寝る走る
プログラム作成作業からから離れて別内容の業務をしており、確認遅れてしまい申し訳ありませんでした。 プログラム作成関しては、本日から再開始めております。コードの見直しをしております。 先ほど、希望の動作がするコードが出来あがりました。 >YuO さま Removeは上手く動きませんでしたが、RemoveAtで指定してあげると削除できる事を確認いたしました。 >shu さま ご指摘のように、 行き着くところは、.Points.Clear()でシリーズを全クリア Enabled = True で有効化に行きあたりました。 私の作成したコードでは、カーソルの再作成が若干重いような感じです。 ありがとうございました。 以下、コードを貼り付けておきます。 Chartを1つ と Checkboxを2個貼り付けて下さい。 '---------------------------------------------------------------------------------------------- Imports System.Windows.Forms.DataVisualization.Charting Public Class Form1 Public xval() As Double '測定時間(格納配列) Public yval() As Double 'DMMからの抵抗値(格納配列) Public yval2() As Double '温度(格納配列) Dim series1 As New Series() '抵抗値シリーズ Dim series2 As New Series() '温度シリーズ Dim series3 As New Series() '始点カーソル Dim series4 As New Series() '終点カーソル Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load CheckBox1.Appearance = Appearance.Button 'トグルボタン(始点) CheckBox1.Text = "始点" CheckBox2.Appearance = Appearance.Button 'トグルボタン(終点) CheckBox2.Text = "終点" ' 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() 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.DarkOliveGreen .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.OrangeRed .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のポイントにマウスを当てた時 If CheckBox1.Checked = True Then '始点 With series3 .Points.Clear() .Enabled = True .LegendText = "始点" 'ライン引き For n = Chart1.ChartAreas(0).AxisY.Minimum To Chart1.ChartAreas(0).AxisY.Maximum Step 0.001 .Points.AddXY(xval(st), n) Next n End With 'シリーズ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 End If If CheckBox2.Checked = True Then '終点 With series4 .Points.Clear() .Enabled = True .LegendText = "終点" 'ライン引き For n = Chart1.ChartAreas(0).AxisY.Minimum To Chart1.ChartAreas(0).AxisY.Maximum Step 0.001 .Points.AddXY(xval(st), n) Next n End With 'シリーズ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 End If Case 1 'シリーズ2のポイントにマウスを当てた時 If CheckBox1.Checked = True Then '始点 With series3 .Points.Clear() .Enabled = True .LegendText = "始点" 'ライン引き For n = Chart1.ChartAreas(0).AxisY2.Minimum To Chart1.ChartAreas(0).AxisY2.Maximum Step 0.001 .Points.AddXY(xval(st), n) Next n End With 'シリーズ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 If If CheckBox2.Checked = True Then '終点 With series4 .Points.Clear() .Enabled = True .LegendText = "終点" 'ライン引き For n = Chart1.ChartAreas(0).AxisY2.Minimum To Chart1.ChartAreas(0).AxisY2.Maximum Step 0.001 .Points.AddXY(xval(st), n) Next n End With 'シリーズ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 If End Select End Sub Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged '始点のトグルが押されている場合 If CheckBox1.Checked = True Then CheckBox2.Checked = False End If End Sub Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged '終点のトグルが押されている場合 If CheckBox2.Checked = True Then CheckBox1.Checked = False End If End Sub End Class |