2009-06-22 39 views
3

下面的代码将创建一个24切片饼图。我如何:.NET饼图:如何将文本添加到切片并旋转图表

  1. 将文本标签添加到每个切片a“幸运之轮”。
  2. 旋转饼图?我想让它像“幸运之轮”一样旋转。

    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

您不需要在代码块中转义HTML。 (i <24) – SLaks 2009-06-23 01:19:50

回答

2

要添加文本标签,拨打g.DrawString

编辑:要使文本像图像一样旋转图形对象到angle + sweep/2并绘制文本。为了让它向下画,yopu可以绘制一个小宽度,并依靠字符包装;如果这不起作用,请使用g.MeasureString来绘制字符vy character,并找出放置下一个字符的位置。

要旋转整个图表,请在绘制之前用度角调用g.RotateTransformEDIT:这样的:

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);