下面的代码创建了一个24切片饼图。我如何:
旋转饼图?我希望它像“财富之轮”一样旋转。
private void DrawPieChart()
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Rectangle rect = new Rectangle(0, 0, 300, 300);
float angle = 0;
Random random = new Random();
int sectors = 24;
int sweep = 360 / sectors;
for(int i=0; i<24;i++)
{
Color clr = Color.FromArgb(random.Next(0, 255),random.Next(0, 255), random.Next(0, 255));
g.FillPie(new SolidBrush(clr), rect, angle, sweep);
angle += sweep;
}
g.Dispose();
}
答案 0 :(得分:2)
要添加文字标签,请致电g.DrawString
。
编辑:要像文字一样制作文字,请将图形对象旋转到angle + sweep / 2
,然后绘制文字。为了使它向下绘制,yopu可能能够以较小的宽度绘制它并依靠字符包裹;如果这不起作用,请绘制字符vy chaaracter并使用g.MeasureString
找出放置下一个字符的位置。
要旋转整个图表,请在绘制之前以度数角度调用g.RotateTransform
。 编辑:像这样:
private void DrawPieChart()
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Rectangle rect = new Rectangle(0, 0, 300, 300);
float angle = 0;
Random random = new Random();
int sectors = 24;
int sweep = 360 / sectors;
g.RotateTransform(90); //Rotates by 90 degrees
for(int i=0; i<24;i++)
{
Color clr = Color.FromArgb(random.Next(0, 255),random.Next(0, 255), random.Next(0, 255));
g.FillPie(new SolidBrush(clr), rect, angle, sweep);
angle += sweep;
}
g.Dispose();
}
为旋转设置动画,为角度创建一个字段,在计时器上递增,然后将字段传递给g.RotateTransform
。
另外,绘制内容的正确方法是处理控件的Paint
事件,并使用e.Graphics
进行绘制。然后,当您想重绘它时,请致电Invalidate
。要防止闪烁,请在构造函数中调用this.SetStyle(ControlStyles.DoubleBuffer, true);
。