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

タイトル Re: Chartオブジェクトで特定のシリーズを消す方法(半解決?)
投稿日: 2016/03/15(Tue) 16:21
投稿者食う寝る走る
完全ではありませんが、
ライン引きのステートメントの後に、以下を入れることで自己解決しそうです。

                'シリーズ3以上になったらシリーズを非表示にする(1,2はデータ)
                If Chart1.Series.Count >= 3 Then
                    Chart1.Series(Chart1.Series.Count - 1).Enabled = False


                End If

                Chart1.Series.Add(series3)


理想は、
series1、series2はデータですので、固定として、始点、終点カーソルは、series3、series4 として series3、series4を消したり、書いたりを繰り返したいんですが、series3、4,5,6・・・と増えていきます。


仕方ないので、その都度シリーズ数を数えて シリーズが3以上になったら
Chart1.Series(Chart1.Series.Count - 1).Enabled = False
で消してから

Chart1.Series.Add(series3)

でシリーズ追加すると、チャート上からカーソルが消えて、再度、書き直しが出来たみたいな動きになります。

Series1,2の凡例の次の3番目に凡例が表示されます。
理想は
---------------------------
1番目:データ1
2番目:データ2
3番目:
---------------------------



理想は
---------------------------
1番目:データ1
2番目:データ2
3番目:始点(カーソル)
4番目:終点(カーソル)
---------------------------
みたく、並び順を固定化出来ればいいのですが、こちらを考えてみます。



'以下、現在の 到達コードです。
'---------------------------------------------------------------------------------------------------
Imports System.Windows.Forms.DataVisualization.Charting

Public Class Form1
    Public xval() As Double
    Public yval() As Double
    Public yval2() As Double

    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 = 0.1
            .MarkerColor = Color.Blue
            .ChartType = SeriesChartType.Point
            .YAxisType = AxisType.Primary '第1軸
        End With


        With series2
            .MarkerSize = 10
            .MarkerStyle = MarkerStyle.Circle
            .MarkerBorderColor = Color.Black
            .MarkerBorderWidth = 0.1
            .MarkerColor = Color.Red
            .ChartType = SeriesChartType.Point
            .YAxisType = AxisType.Secondary '第2軸
        End With


        'チャートの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 Double)
        Dim series3 As New Series
        Dim series4 As New Series

        Select Case sr 'シリーズ判定
            Case 0 'シリーズ1のポイントにマウスを当てた時

                With series3
                    .MarkerSize = 1
                    .MarkerStyle = MarkerStyle.Square

                    .MarkerBorderColor = Color.Black
                    .MarkerBorderWidth = 0.01
                    .MarkerColor = Color.Blue
                    .ChartType = SeriesChartType.Point
                End With

                'ライン引き
                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以上になったらシリーズを非表示にする(1,2はデータ)
                If Chart1.Series.Count >= 3 Then
                    Chart1.Series(Chart1.Series.Count - 1).Enabled = False

                End If

                Chart1.Series.Add(series3)
                Chart1.Series(Chart1.Series.Count - 1).LegendText = "始点"


                'シリーズ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のポイントにマウスを当てた時
                With series4
                    .MarkerSize = 1
                    .MarkerStyle = MarkerStyle.Square

                    .MarkerBorderColor = Color.Black
                    .MarkerBorderWidth = 0.01
                    .MarkerColor = Color.Red
                    .ChartType = SeriesChartType.Point
                End With

                'ライン引き
                For n = Chart1.ChartAreas(0).AxisY.Minimum To Chart1.ChartAreas(0).AxisY.Maximum Step 0.001
                    series4.Points.AddXY(xval(st), n)
                Next n

                'シリーズ3以上になったらシリーズを非表示にする(1,2はデータ)
                If Chart1.Series.Count >= 4 Then
                    Chart1.Series(Chart1.Series.Count - 1).Enabled = False

                End If
                Chart1.Series.Add(series4)
                Chart1.Series(Chart1.Series.Count - 1).LegendText = "終点"


                'シリーズ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

End Class

'-------------------------------------------------------------------------------------------------

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

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