2012-12-29 5 views
0

J'ai besoin de dessiner un rectangle autour du bord d'un panneau créé dynamiquement pendant l'exécution. Tout d'abord, je reçois une couleur en code hexa. Je convertir en ARVB en utilisant un code que je trouve ici sur stackoverflow en semblable question:Le rectangle ne dessine pas sur un panneau

string color = *getting the hexa code* 
int argb = Int32.Parse(color.Replace("#", ""), NumberStyles.HexNumber); 
Color clr = Color.FromArgb(argb); 

Maintenant, j'essaie de dessiner le rectangle à l'aide de ce code:

Graphics g = panel.CreateGraphics(); 
Pen p = new Pen(clr); 
Rectangle r = new Rectangle(1, 1, 578, 38); 
g.DrawRectangle(p, r); 

Mais il ne fait rien, pas rectangle apparaît. Ce code est inclus dans une partie du code qui crée le panneau lui-même et le remplit avec certaines commandes (Comboboxes, boutons, etc.). Ai-je besoin d'ajouter le rectangle au panneau en utilisant quelque chose comme panel.Controls.Add(r);? (Essayé que, bien sûr rectangle n'est pas un contrôle donc il ne fonctionne pas)

+0

Quelle est la fonction utilisée pour dessiner. –

+0

@MarkHall dans une méthode qui crée le panneau. Cette méthode est située dans public Form1(). –

+0

essayez les panneaux Paint événement, voir si cela fonctionne pour vous. Vérifiez également que vous obtenez une couleur valide. –

Répondre

1

Essayez de déplacer le dessin graphique dans l'événement de peinture de panneaux, puisque vous créez ces dynamique un gestionnaire d'événements anonyme devrait le rendre facile.

private void CreatePanel() 
{ 
    Panel panel = new Panel(); 
    panel.Width = 600; 
    panel.Height = 100; 
    panel.Controls.Add(....); 

    panel.Paint += (sender, e) => 
    { 
     string color = "#FFE80000"; //*getting the hexa code* 
     int argb = Int32.Parse(color.Replace("#", ""), NumberStyles.HexNumber); 
     Color clr = Color.FromArgb(argb); 
     Pen p = new Pen(clr); 
     Rectangle r = new Rectangle(1, 1, 578, 38); 
     e.Graphics.DrawRectangle(p, r); 
    }; 

    Controls.Add(panel); 
} 
+0

Oui, ça marche :) Merci. –

+0

J'aime cette approche, ça fonctionne comme un charme. Une question cependant: si je veux supprimer plus tard ce gestionnaire d'événement, je ne peux pas utiliser un gestionnaire d'événement anonyme, correct? Comment utiliser le même code avec un gestionnaire d'événements nommé? – physicalattraction

Questions connexes