快一点。 我有一个图表,可以显示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;
}
}
}
我想要做的一件事是,我希望将每个系列设置为每个颜色(例如第一个系列红色,第二个系列蓝色)。我很难找到一种有效的方法来做到这一点,但我想它涉及将两个索引中的第一个设置为一种颜色(红色),将第二种设置为另一种颜色(蓝色)。我想我可以使用saveChartSeries()函数中现有的for循环来做到这一点,如下所示:
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;
}
}
}
这和我到目前为止所取得的差不多,如果有人可以提供下一步,或者如果我过于复杂并且那里采用更简单的方式,我真的很感激有人指出来了!
答案 0 :(得分:1)
如果我理解正确,您希望使用固定列表中的颜色为每个可见系列着色。
这将涉及更改后续系列&#39;你启用或禁用上一个系列时的颜色,对吗?
这是一个能够做到这一点的功能:
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-loop 来做到这一点。嗯。在我的观点中,你既要过于复杂又要设置一个完全错误的优先级。
不要试图在现有的循环中适应某些东西&#39 ;;相反,保持简单,并在处理完用户操作后调用函数来处理显示颜色。
尝试&#39;分开关注&#39; ,并始终致力于创建小型且自给自足的例程!