在图表中编辑图表的自定义颜色

时间:2014-11-03 08:45:39

标签: vb.net colors charts points

我的表单上有一个图表,并创建了一个子图表,它将添加一个新图表。这很好用。 如果添加的图表是整个图表中的第一个图表,我希望它是红色的。如果新图形不是第一个,我希望它是蓝色的。这是我的代码:

Public Shared Sub graphHinzufügen(pfad As String)
        'Daten aus Datei lesen und Graphen erstellen/formatieren
        DateiWiderstand.wertepaareAusDateiLesen(pfad)
        Hauptseite.ChartWiderstand.Series.Add(System.IO.Path.GetFileName(pfad))
        With Hauptseite.ChartWiderstand.Series(System.IO.Path.GetFileName(pfad))
            .ChartType = DataVisualization.Charting.SeriesChartType.Spline
            For i = 0 To DateiWiderstand.wertepaarGeschwindigkeit.Count - 1
                .Points.AddXY(DateiWiderstand.wertepaarGeschwindigkeit.Item(i), DateiWiderstand.wertepaarWiderstand.Item(i))
            Next i
            If Hauptseite.ChartWiderstand.Series.Count = 1 Then 'ToDo: Funktioniert noch nicht bei erster Zeile!?
                .Color = Color.Red
            Else
                .Color = Color.Blue
            End If
        End With
    End Sub

问题在于.Color = Color.Red没有像它应该的那样工作。 我尝试调试:

  • 我在.Color-events之前的if-cases中制作了msgbox。我让他们给我Series.Count。这很有效。所以我知道if-cases是正确的,并且当它是第一个图时程序进入第一个if-case。
  • 我在其他事件处理程序中使用.Color = Color.Red,图表会根据需要切换颜色。所以这应该是为图表着色的正确代码。

我的错误在哪里?如果您需要更多代码,请告诉我您想要哪些类。 谢谢!

编辑:以下是与我的问题相关的所有代码。欢迎所有评论和提示。 :)

Public Class Hauptseite

    Private Sub Hauptseite_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Alle Reiter mit den temp-Dateien füllen
        ImportExportWiderstand.ReiterWiderstandImportieren()
    End Sub

    Private Sub ButtonWiderstandHinzufügen_Click(sender As Object, e As EventArgs) Handles ButtonWiderstandHinzufügen.Click
        'Datei im DGV hinzufügen und Graphen erstellen
        Dim widerstandDateiWähler As New OpenFileDialog
        If widerstandDateiWähler.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                DiagrammWiderstand.graphHinzufügen(widerstandDateiWähler.FileName)
                With Me.DataGridViewWiderstand
                    .Rows.Add()
                    .Rows(.RowCount - 1).Cells(0).Value = System.IO.Path.GetFileName(widerstandDateiWähler.FileName)
                    .Rows(.RowCount - 1).Cells(1).Value = widerstandDateiWähler.FileName
                End With
            Catch ex As Exception
                MsgBox("Datei kann nicht hinzugefügt werden. Wahrscheinlich ist der Dateiname schon vorhanden.")
            End Try
        End If
    End Sub

    Private Sub ButtonWiderstandEntfernen_Click(sender As Object, e As EventArgs) Handles ButtonWiderstandEntfernen.Click
        'Graphen löschen und Datei aus dem DGV entfernen
        With Me.DataGridViewWiderstand
            Try
                DiagrammWiderstand.graphEntfernen(Me.DataGridViewWiderstand.SelectedRows(0).Cells(1).Value)
                .Rows.Remove(.SelectedRows(0))
            Catch ex As Exception

            End Try
        End With
    End Sub

    Private Sub Hauptseite_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        'alle Informationen aus den Reitern in temp-Dateien schreiben
        ImportExportWiderstand.ReiterWiderstandExportieren()
    End Sub

    Private Sub DataGridViewWiderstand_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridViewWiderstand.RowEnter
        'bei Zeilenwechsel Farben der Graphen aktualisieren
        DiagrammWiderstand.FarbeDerGraphenAktualisieren(Me.DataGridViewWiderstand.Rows(e.RowIndex).Cells(1).Value)
    End Sub

End Class


Public Class DiagrammWiderstand

    Public Shared Sub graphHinzufügen(pfad As String)
        'Daten aus Datei lesen und Graphen erstellen/formatieren
        DateiWiderstand.wertepaareAusDateiLesen(pfad)
        Hauptseite.ChartWiderstand.Series.Add(System.IO.Path.GetFileName(pfad))
        With Hauptseite.ChartWiderstand.Series(System.IO.Path.GetFileName(pfad))
            .ChartType = DataVisualization.Charting.SeriesChartType.Spline
            For i = 0 To DateiWiderstand.wertepaarGeschwindigkeit.Count - 1
                .Points.AddXY(DateiWiderstand.wertepaarGeschwindigkeit.Item(i), DateiWiderstand.wertepaarWiderstand.Item(i))
            Next i
            If Hauptseite.ChartWiderstand.Series.Count = 1 Then 'ToDo: Funktioniert noch nicht bei erster Zeile!?
                .Color = Color.Red
            Else
                .Color = Color.Blue
            End If
        End With
    End Sub

    Public Shared Sub graphEntfernen(pfad As String)
        'spezifischen Graphen aus Diagramm entfernen
        If pfad <> Nothing Then
            Hauptseite.ChartWiderstand.Series.Remove(Hauptseite.ChartWiderstand.Series(System.IO.Path.GetFileName(pfad)))
        End If
    End Sub

    Public Shared Sub aktuellenGraphFärben(pfad As String)
        'spezifischen Graphen rot färben
        If pfad <> Nothing Then
            Hauptseite.ChartWiderstand.Series(System.IO.Path.GetFileName(pfad)).Color = Color.Red
        End If
    End Sub

    Public Shared Sub alleGraphenEntfärben()
        'alle Graphen im Diagram blau färben
        With Hauptseite.ChartWiderstand
            If .Series.Count <> 0 Then
                For i = 0 To .Series.Count - 1
                    .Series(i).Color = Color.Blue
                Next
            End If         
        End With
    End Sub

    Public Shared Sub FarbeDerGraphenAktualisieren(pfad As String)
        'Farben der Graphen im Diagramm aktualisieren (durch entfärben und färben)
        alleGraphenEntfärben()
        aktuellenGraphFärben(pfad)
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

我设法通过重新组织我的代码解决了我的问题。通过每次添加行时调用自写更新方法,删除或输入图形的颜色就像我希望的那样变化。以下是相关代码:

#Region "Reiter Widerstand"

    Private Sub ButtonWiderstandHinzufügen_Click(sender As Object, e As EventArgs) Handles ButtonWiderstandHinzufügen.Click
        Dim widerstandDateiWähler As New OpenFileDialog
        If widerstandDateiWähler.ShowDialog = Windows.Forms.DialogResult.OK Then
            CChartWiderstand.graphHinzufügen(widerstandDateiWähler.FileName)
            CDGVWiderstand.zeileHinzufügen(widerstandDateiWähler.FileName)
            CChartWiderstand.FarbeDerGraphenAktualisieren(Me.DataGridViewWiderstand.SelectedRows(0).Cells(1).Value)
        End If
    End Sub

    Private Sub ButtonWiderstandEntfernen_Click(sender As Object, e As EventArgs) Handles ButtonWiderstandEntfernen.Click
        With Me.DataGridViewWiderstand
            If .SelectedRows.Count > 0 Then
                CChartWiderstand.graphEntfernen(.SelectedRows(0).Cells(1).Value)
                CDGVWiderstand.zeileEntfernen(.SelectedRows(0).Cells(1).Value)
                If .SelectedRows.Count > 0 Then
                    CChartWiderstand.FarbeDerGraphenAktualisieren(.SelectedRows(0).Cells(1).Value)
                End If
            End If
        End With
    End Sub

    Private Sub DataGridViewWiderstand_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridViewWiderstand.RowEnter
        CChartWiderstand.FarbeDerGraphenAktualisieren(Me.DataGridViewWiderstand.Rows(e.RowIndex).Cells(1).Value)
    End Sub

#End Region

和此:

 Public Shared Sub aktuellenGraphFärben(pfad As String)
        If prüfenObGraphExistiert(pfad) Then
            Hauptseite.ChartWiderstand.Series(System.IO.Path.GetFileName(pfad)).Color = Color.Red
        End If
    End Sub

    Public Shared Sub alleGraphenEntfärben()
        With Hauptseite.ChartWiderstand
            If .Series.Count <> 0 Then
                For i = 0 To .Series.Count - 1
                    .Series(i).Color = Color.Blue
                Next
            End If
        End With
    End Sub

    Public Shared Sub FarbeDerGraphenAktualisieren(pfad As String)
        alleGraphenEntfärben()
        aktuellenGraphFärben(pfad)
    End Sub
相关问题