将 ChartAreas 动态添加到 Chart 的列中,并使 Chart 在 winforms 中自动滚动

Posted

技术标签:

【中文标题】将 ChartAreas 动态添加到 Chart 的列中,并使 Chart 在 winforms 中自动滚动【英文标题】:Dynamically add ChartAreas to Chart in a column and make Chart auto-scrollable in winforms 【发布时间】:2022-01-05 20:45:00 【问题描述】:

我需要你的建议。我想在我的图表中添加许多 ChartAreas 并将它们垂直对齐在一列中,该列将是其父级的 100% 宽度,并且在添加更多聊天区域时将变得可滚动。 目前,我使用此代码添加更多图表区域:

private void AddChartArea(int index)

    string chartAreaName = index.ToString();
    chart.ChartAreas.Add(chartAreaName);
    chart.Series.Add(new Series());
    chart.Series[index].ChartType = SeriesChartType.Line;
    chart.Series[index].MarkerStyle = MarkerStyle.Diamond;
    chart.Series[index].ChartArea = chartAreaName;

    /* Trying to align chart areas vertically */
    chart.ChartAreas[index].AlignWithChartArea = chart.ChartAreas[index - 1].Name;
    chart.ChartAreas[index].AlignmentStyle = AreaAlignmentStyles.AxesView;
    chart.ChartAreas[index].AlignmentOrientation = AreaAlignmentOrientations.Vertical;

但是当图表区域数大于 3 时,我的图表区域仍然是这样的:

虽然我希望它是这样的,但右侧有一个垂直滚动条:

【问题讨论】:

丽丝so ? 【参考方案1】:

所以,正如 TaW 所指出的,我的问题类似于this one。但是我做了一些改进,可以自动调整图表的整体高度。

所以我的图表被放入了具有 AutoScroll 的面板中。 然后,每次我创建一个新的 ChartArea 时都会调用这个方法:

private void DrawNewChartArea(int index)

    int chartAreaMinHeight = 200;
    chart.Dock = DockStyle.Top;

    float width = 99;
    float height = 100 / chart.ChartAreas.Count;
    float x = 0;
    float y = height * index;

    if (chartAreaMinHeight * (index + 1) > chart.Height)
    
        chart.Height = chartAreaMinHeight * (index + 1);
        // realign height of all the chart areas if we are changing chart height
        for (int i = 0; i < chart.ChartAreas.Count; i++)
        
            float caY = height * i;
            chart.ChartAreas[i].Position.Height = height;
            chart.ChartAreas[i].Position.Y = caY;
        
    

    chart.ChartAreas[index].Position = new ElementPosition(x, y, width, height);

【讨论】:

以上是关于将 ChartAreas 动态添加到 Chart 的列中,并使 Chart 在 winforms 中自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

winform中使用chart绘制柱状图,没法显示图表 方法如下:

C# winform chart 控件横坐标只显示固定个数值怎么设置,比如固定显示500或1000个数据?

c# Chart初始化显示问题

如何将带有图例键的数据表添加到 C# 中的 MS 图表?

Chart折线图自定义横轴实现阶梯折线效果

WebForm 的Charts控件