2014-11-03 1 views
0

У меня есть диаграмма в моей форме и сделана надпись, которая добавит к ней новый график. Это прекрасно работает. Если добавленный график является первым графиком во всей диаграмме, я хочу, чтобы он был красным. Если новый график не первый, я хочу, чтобы он был окрашен в синий цвет. Вот мой код:Редактировать пользовательский цвет графика в графике

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 
+0

Какой тип диаграммы это? Вы пробовали свойство .Forecolor? Наконец, вы пытались заставить его перерисовать после того, как вы назначили цвет? То есть Chart1.Refresh()? – Kat

+0

Нет таких методов, как Chart.Series.Forecolor или Chart.refresh. Поэтому я не могу попробовать ваши предложения. –

+0

Chart.Forecolor существует, но не работает для меня, потому что он отображает все графики не только по мере необходимости. Существует метод, называемый Chart.update, но мне это тоже не помогает. –

ответ

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