2009-06-22 40 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);