2009-06-22 5 views
3

Le code ci-dessous crée un graphique à secteurs de 24 tranches. Comment:Diagramme à secteurs .NET: comment ajouter du texte aux tranches et faire pivoter le graphique

  1. Ajoutez des étiquettes de texte à chaque tranche de la «roue de la fortune».
  2. Faire pivoter le graphique à secteurs? Je veux qu'il tourne comme "Wheel of Fortune".

    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

Vous n'avez pas besoin d'échapper HTML dans les blocs de code. (i <24) – SLaks

+0

Désolé, je ne suis pas sûr de ce qui s'est mal passé. – Sajee

Répondre

2

Pour ajouter des étiquettes de texte, appelez g.DrawString.

EDIT: Pour rendre le texte comme votre image, faites pivoter l'objet Graphics à angle + sweep/2 et dessinez votre texte. Pour le tirer vers le bas, yopu peut être capable de dessiner dans une petite largeur et compter sur l'habillage de personnage; Si cela ne fonctionne pas, dessinez le caractère vy chaaracter et utilisez g.MeasureString pour savoir où placer le caractère suivant.

Pour faire pivoter l'ensemble du graphique, appelez g.RotateTransform avec un angle en degrés avant de dessiner. EDIT: comme ceci:

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

Animer la rotation, faire un champ pour l'angle, l'incrément sur une minuterie et passer le champ à g.RotateTransform.

En outre, la manière correcte de dessiner des choses consiste à gérer l'événement Paint du contrôle et à dessiner à l'aide de e.Graphics. Ensuite, lorsque vous souhaitez le redessiner, appelez Invalidate. Pour éviter le scintillement, appelez le this.SetStyle(ControlStyles.DoubleBuffer, true); dans le constructeur.

Questions connexes