Редактировать пользовательский цвет графика на графике
У меня есть форма в моей форме, и я создал подпрограмму, которая добавит к ней новый график. Это отлично работает. Если добавленный график является первым графиком на всем графике, я хочу, чтобы он был красным. Если новый график не первый, я хочу, чтобы он был синего цвета. Вот мой код:
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
не работает так, как должно. Мои попытки отладки:
- Я сделал msgbox в if-случаях перед событиями.Color. Я позволил им дать мне Series.Count. Это сработало. Так что я знаю, что if-случаи верны и что программа переходит в первый if-случай, когда это первый граф.
- я использую
.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 ответ
Мне удалось решить мою проблему путем реорганизации моего кода. При вызове самописного метода обновления каждый раз, когда строка добавляется, удаляется или вводится, цвет графиков изменяется так же хорошо, как я хотел. Вот соответствующий код:
#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