Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一列中有多个图表区域_C#_Winforms_Charts - Fatal编程技术网

C# 一列中有多个图表区域

C# 一列中有多个图表区域,c#,winforms,charts,C#,Winforms,Charts,我有一个包含多个图表区域的图表。当我按下一个按钮,一个新的图表区域正在创建等。 我的问题是,在添加一些图表区域后,我得到以下结果: 我希望每个图表区域只在一列中,一列接一列,如下所示: 这可能吗 编辑:动态添加图表区域 左侧是添加了3个图表区域的图表,右侧是添加了4个区域的图表。使用属性 通过使用AlignWithChartArea、AlignmentOrientation和AlignmentStyle属性,可以水平、垂直或同时对齐或同步两个或多个图表区域 首先,将AlignWithChar

我有一个包含多个图表区域的图表。当我按下一个按钮,一个新的图表区域正在创建等。 我的问题是,在添加一些图表区域后,我得到以下结果: 我希望每个图表区域只在一列中,一列接一列,如下所示:

这可能吗

编辑:动态添加图表区域

左侧是添加了3个图表区域的图表,右侧是添加了4个区域的图表。

使用属性

通过使用AlignWithChartArea、AlignmentOrientation和AlignmentStyle属性,可以水平、垂直或同时对齐或同步两个或多个图表区域

首先,将AlignWithChartArea属性设置为ChartArea对象的名称。然后,将根据AlignmentStyle设置(定义要使用的路线)和AlignmentOrientation设置(定义应用于设置路线的图表区域元素)对齐此图表区域

因此,要将图表区域2置于图表区域1之下:

ChartArea2.AlignWithChartArea1;
ChartArea2.AlignmentStyle = AreaAlignmentStyles.Position;
ChartArea2.AlignmentOrientation = AreaAlignmentOrientation.Vertical;

以下是您如何实现所需的,也指您的问题:
https://stackoverflow.com/questions/67124754/dynamically-add-chart-areas-in-vertical-alignment

使用
Position
属性,请阅读代码中的注释:

private void button1_Click(object sender, EventArgs e)
{
    List<ChartArea> Areas = new List<ChartArea>();
    int numberOfAreas = 5;
    chart1.Legends[0].Enabled = false;

    for (int k = 1; k <= numberOfAreas; k++) // YOU WANT 5 and not 4 AREAS - changed k< to k<=
    {
        var S1 = new Series();
        chart1.Series.Add(S1);
        S1.Name = k.ToString();
        for (int j = 0; j < 100; j += 10) S1.Points.AddXY(j, j / 10);
        S1.Color = Color.Transparent;

        Areas.Add(new ChartArea(k.ToString()));
        chart1.ChartAreas.Add(Areas[k - 1]); // IT IS k-1 and not k - we start counting from 0                 
        S1.ChartArea = k.ToString();
        chart1.ChartAreas[k - 1].AlignWithChartArea = chart1.ChartAreas[k - 1].Name;
        chart1.ChartAreas[k - 1].AlignmentStyle = AreaAlignmentStyles.Position;
        chart1.ChartAreas[k - 1].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
    }

    // NOW THE IMPORTANT PART
    float currentHeight = 0;
    foreach (var itm in Areas)
    {
        itm.Position.Height = 100 / numberOfAreas; // Note: the valus are in percenteges and not absolute pixels
        itm.Position.Y = currentHeight;
        itm.Position.X = 5;
        itm.Position.Width = 95;
        currentHeight += 100 / numberOfAreas;
    }

}
private void按钮1\u单击(对象发送者,事件参数e)
{
列表区域=新列表();
int numberOfAreas=5;
图表1.图例[0]。已启用=false;

对于(int k=1;k非常感谢你的回答。我应用了你提出的方法,效果很好,但在我的例子中,我希望每次用户添加一个新的图表区域时都会发生这种情况,如果用户添加了太多的区域,我就看不到初始的图表区域。我的目标是最小化旧的区域,以便同时可以看到所有的图表区域。你的实际目标是ems有点不清楚-我的目标是最小化旧的图表区域,以便通过最小化可以同时看到所有图表区域。你的意思是变小吗?(通常的意思是变成一个图标)。这实际上不受支持,但如果您真的想这样做,您可以编写一个ChartArea管理器。关键是设置ChartArea.Position,这是一个ElementPosition。它的值以图表的客户端区域的百分比表示。设置ChartArea.Position。第一行应该使用ChartArea名称,可能是ChartArea 2.AlignWithChartArea=“ChartArea1”;我编辑了我的问题,以明确我的意思。这似乎只适用于最多3个图表区域