【问题标题】:Using checkboxes to delete lines off line graph使用复选框从折线图上删除线
【发布时间】:2026-01-07 02:30:01
【问题描述】:

我有一个图表,上面有来自不同列表的线条。 我添加了几个复选框并使用 if 语句来检查复选框是否被单击。像这样:

public Form1()
{           
    InitializeComponent();
    CreateGraph();
    this.Text = "HRM File Analyser";

    if (hrCheck.Checked)
    {
        drawHR();
        chart1.Update();
    }
    else if (!hrCheck.Checked)
    {
        chart1.Series["Heart Rate"].Points.Clear();
        chart1.Update();
    }
}  

但是,即使在调用更新方法之后,也没有任何变化。

有人有什么想法吗?

【问题讨论】:

  • else 条件是否正常运行?你能显示drawHR()的内容吗?
  • 另外,这些复选框是否已在此表单上声明?如果是这样,您不能在表单构造函数的条件表达式中使用它们的检查状态。您可能希望为复选框添加一个选中的事件处理程序并将您的条件代码放在那里。

标签: c# checkbox graph charts


【解决方案1】:

您向我们展示的代码的第一个问题是,它似乎是交互式的,但一切(我们看到)实际上只在启动时发生一次。

  • 相反,您应该编码CheckboxCheckChanged 事件! (你可以通过双击设计器中的复选框来实现它。)

  • 接下来我建议不要清除,即删除所有数据。而是简单地禁用该系列。现在您可以关闭或打开该系列了..

  • 复选框检查逻辑也被夸大了;一张支票就足够了!

所以新的和改进的版本应该是这样的:

public Form1()
{           
    InitializeComponent();
    CreateGraph();
    this.Text = "HRM File Analyser";
    hrCheck_CheckedChanged(null, null);   // set initial state
    ..
}

private void hrCheck_CheckedChanged(object sender, EventArgs e)
{
    chart1.Series["Heart Rate"].Enabled = hrCheck.Checked;
}

如果不是双击创建的,别忘了hook up hrCheck_CheckedChanged事件!

【讨论】: