2015-08-28 62 views
0

只是一個快速。 我有一個圖表,可以顯示9個不同系列,數據通過來自用戶的文本框進入並填充這些相應的系列。啓用時更改圖表系列顏色,具體取決於系列[索引]

該圖形鏈接到checkedlistbox,並且在列表框中選中的項目在圖表上啓用它們各自的系列。只有2系列可以在任何一個時間,這沒有問題,使用下面的代碼工作中啓用:

private void chListBoxChartSeries_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Checked && chListBoxChartSeries.CheckedItems.Count >= 2) 
     { 
      e.NewValue = CheckState.Unchecked; 
     } 
    } 

    public void saveChartSeries() 
    { 
     //placeholder variable to relate between checklist item and chart series 
     string seriesName; 

     for (int index = 0; index < chListBoxChartSeries.Items.Count; ++index) 
     { 
      seriesName = chListBoxChartSeries.Items[index].ToString(); 
      if (chListBoxChartSeries.CheckedItems.Contains(chListBoxChartSeries.Items[index])) 
      { 
       main.chartVitals.Series[seriesName].Enabled = true; 
      } 
      else 
      { 
       main.chartVitals.Series[seriesName].Enabled = false; 
      } 
     } 
    } 

有一件事我做想做的事在這之後,我想任何一個系列都能夠被設置爲每個顏色(第一系列紅色,第二系列藍色)。我正在努力尋找一種有效的方法來做到這一點,但我想它涉及將兩個索引中的第一個設置爲一種顏色(紅色),第二個索引設置爲另一種顏色(藍色)。我想我可以在此使用現有的for循環中saveChartSeries()函數來完成,像這樣:

public void saveChartSeries() 
    { 
     //placeholder variable to relate between checklist item and chart series 
     string seriesName; 

     for (int index = 0; index < chListBoxChartSeries.Items.Count; ++index) 
     { 
      seriesName = chListBoxChartSeries.Items[index].ToString(); 
      if (chListBoxChartSeries.CheckedItems.Contains(chListBoxChartSeries.Items[index])) 
      { 
       main.chartVitals.Series[seriesName].Enabled = true; 
       if (main.chartVitals.Series[seriesName].Enabled == true) 
       { 
        //set series color to Color.Red 
        //if there is already a red series, set to Color.Blue 
       } 
      } 
      else 
      { 
       main.chartVitals.Series[seriesName].Enabled = false; 
      } 
     } 
    } 

這是大約相當於我能得到這麼遠,如果有人能提供下一個步驟,或者如果我過於複雜並且有一個更簡單的方法,我會很感激有人指出它!

回答

1

如果我理解正確,您想用固定列表中的顏色對每個可見序列着色。

這將涉及改變後續系列的顏色,每當你啓用或禁用以前的系列,對吧?

這裏是一個函數,將做到這一點:

void colorSeries(Chart chart) 
{ 
    List<Color> seriescolors = new List<Color> 
     { Color.Khaki, Color.Brown, Color.CornflowerBlue, 
     Color.DarkCyan, Color.ForestGreen, Color.Gold, Color.HotPink, Color.Indigo}; 

    int co = 0; 
    foreach (Series s in chart.Series) 
     if (s.Enabled) s.Color = seriescolors[co++]; 
} 

你會在每次啓用時間把它或禁用系列。

您還寫道:如果我過於複雜它我想我可以用做現有的for循環。嗯。在我的觀點中,你既過度複雜又設置了完全錯誤的優先。

不要試圖在'現有循環'中安裝某些東西;取而代之的是讓事情變得簡單,並在處理完用戶操作後調用一個函數來處理顯示顏色。

嘗試「單獨關注」,始終瞄準創建小自給例程!

+0

這有效果,所以謝謝你。同樣謝謝你的建議,我將在未來接受這一點,並將嘗試使用這些原則優化我的程序代碼。 – marcuthh

相關問題