У меня есть диаграмма в моей форме и сделана надпись, которая добавит к ней новый график. Это прекрасно работает. Если добавленный график является первым графиком во всей диаграмме, я хочу, чтобы он был красным. Если новый график не первый, я хочу, чтобы он был окрашен в синий цвет. Вот мой код:Редактировать пользовательский цвет графика в графике
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
не работает, как это должно быть. Мои попытки отладки:
- Я сделал msgboxes в случаях, если это-как раз перед .color-событий. Я позволил им дать мне серию. Это сработало. Поэтому я знаю, что if-cases правильные и что программа переходит в первый случай if, когда это первый граф.
- Я использую
.Color = Color.Red
в других обработчиках событий, а графы переключают цвет, если я хочу. Таким образом, это должен быть правильный код для цветного графика.
Где моя ошибка? Если вам нужен больше кода, просто скажите мне, какие классы вы хотите. Спасибо!
EDIT: Вот весь код, который должен иметь отношение к моей проблеме. Все комментарии и советы приветствуются. :)
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
Какой тип диаграммы это? Вы пробовали свойство .Forecolor? Наконец, вы пытались заставить его перерисовать после того, как вы назначили цвет? То есть Chart1.Refresh()? – Kat
Нет таких методов, как Chart.Series.Forecolor или Chart.refresh. Поэтому я не могу попробовать ваши предложения. –
Chart.Forecolor существует, но не работает для меня, потому что он отображает все графики не только по мере необходимости. Существует метод, называемый Chart.update, но мне это тоже не помогает. –