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

タイトル 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

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

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