这是我的代码:
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
时间。
这就是我的意思:
添加1
如何在图表中产生如此巨大的差异?
答案 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
。