图表重新定位自己以奇怪的方式重叠文本

时间:2016-12-21 15:57:25

标签: c# .net winforms visual-studio charts

这是我的代码:

public Form1()
{
    InitializeComponent();
    // Data arrays.
    string[] seriesArray = { "Cats", "Dogs" };
    int[] pointsArray = { 1, 2 };

    // Set palette.
    this.chart1.Palette = ChartColorPalette.SeaGreen;

    // Set title.
    this.chart1.Titles.Add("Pets");

    // Add series.
    for (int i = 0; i < seriesArray.Length; i++)
    {
        // Add series.
        Series series = this.chart1.Series.Add(seriesArray[i]);

        // Add point.
        series.Points.Add(pointsArray[i]);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    chart1.Titles[0].Position.Y = chart1.Titles[0].Position.Y + 1;
}

我面临的问题是,当我更改标题Pets的位置时,图表会以不同的方式重绘自己。我想知道为什么会发生这种情况并且有办法解决这个问题 - 因为它会将文本放在图表顶部,而这只发生在first时间。

这就是我的意思:

enter image description here

添加1如何在图表中产生如此巨大的差异?

2 个答案:

答案 0 :(得分:0)

尝试使用DockingOffset而不是Position.Y

private void button1_Click(object sender, EventArgs e)
{
    chart1.Titles[0].DockingOffset = chart1.Titles[0].DockingOffset + 1;
}

'Position.Y'的问题在于它以“自动”位置开头,所以第一次向它添加1时,编译器会分配一个值,重绘然后再添加1.

答案 1 :(得分:0)

  

如何添加1在图表中产生如此巨大的差异?

首先,因为许多或大多数ChartElements百分比定位。

有些是Values,有两个,pixels,但大多数是百分比

,最初设置为 auto ,并在必要时重新计算。

因此,如果ChartArea的高度为80%且Chart的{​​{1}}为500像素,则Clientsize的高度计算为400像素。

我不知道你的图表中计算ChartArea的百分比是多少,但如果是,则说4%,然后加1使其为5%,将其从20px降低到y = 25px。

但是等等,你观察到的差异远不止于此!事实上,差异远远大于Title.Position.Height的{​​{1}}!那是为什么?

其次,在自动计算可用空格时,使用Height & Top从<{1}}中删除了要考虑的元素{1}}从该计算中“消失”,ChartArea突然出现了更多的垂直空间。所以增长甚至恰好与Chart's Title's Position重叠。

你怎么能阻止这种情况?那么你可以通过自动取出来阻止计算的变化,也许是这样的:

Title

请注意,其他元素也可能会受到影响。因此ChartArea也将使用顶部的释放空间并向上移动..(您可以在屏幕截图中看到。)由于空间不再自动计算,您将不得不处理更多问题,当某些元素增长并需要更多空间时,如轴标签或Title ..

顺便说一下,要将 RectangleF r = chart1.ChartAreas[0].Position.ToRectangleF(); chart1.ChartAreas[0].Position = new ElementPosition(r.X, r.Y, r.Width, r.Height); 还原为Legend,您需要将值设置为Legend