2012-12-10 6 views
1

Je dois dessiner un rectangle dans un panneau. Je ne connais pas la couleur à l'avance, j'obtiens la couleur pendant l'exécution, je ne sais pas comment définir la couleur non à une valeur fixe, et deuxièmement - quand j'essaye de dessiner le rectangle, il ne fait rien du tout. Voici mon code qui devrait dessiner le rectangle (en fait il fait dans un autre projet, mais c'est juste sous une forme simple, et non dans un panneau)Dessin d'un rectangle sur un panneau

Graphics g; 
    g = CreateGraphics(); 
    Pen p; 
    Rectangle r; 
    p = new Pen(Brushes.Blue); 
    r = new Rectangle(1, 1, 578, 38); 
    g.DrawRectangle(p, r);` 

donc je dois remplacer (Brushes.Blue) avec une variable et j'ai besoin de dessiner le rectangle dans un panneau sur ses coordonnées définies dans ce code ..

Répondre

1

Construire votre Pen en utilisant le constructeur Pen(Color) au lieu du Pen(Brush) un. Ensuite, vous pouvez définir votre couleur une fois que vous le connaissez.

0

Vous devez effectuer dessin dans l'événement Paint du panneau. Cet événement se produit chaque fois que Windows décide qu'il est temps de repeindre le panneau et que PaintEventArgs contient un objet Graphics sur lequel vous pouvez dessiner le rectangle.

Le Brush est une classe abstraite, mais vous pouvez utiliser l'objet SolidBrush pour créer une brosse de couleur personnalisée lors de l'exécution:

int red = 255; 
int green = 0; 
int blue = 0; 
Brush myBrush = new SolidBrush(Color.FromArgb(red, green, blue)); 
0

vous êtes ici:

private Color _color;     // save the color somewhere 
private bool iKnowDaColor = false; // this will be set to true when we know the color 
public Form1() { 
    InitializeComponents(); 

    // on invalidate we want to be able to draw the rectangle 
    panel1.Paint += new PaintEventHandler(panel_Paint); 
} 

void panel_Paint(object sender, PaintEventArgs e) { 
    // if we know the color paint the rectangle 
    if(iKnowDaColor) { 
     e.Graphics.DrawRectangle(new Pen(_color), 
      1, 1, 578, 38); 
    } 
} 

Et quand vous connaissez la couleur:

_color = ... 
iKnowDaColor = true; 

// causes the panel to invalidate and our painting procedure to be called 
panel.Invalidate(); 

Je n'ai pas testé mais devrait vous donner l'idée de base.

0

Je pense que la meilleure façon de le faire est d'étendre la classe Panel et d'ajouter une certaine logique d'événement OnPaint personnalisé.

public class PanelRect : Panel 
{ 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     using (Graphics g = e.Graphics) 
     { 
      Rectangle rect = ClientRectangle; 
      rect.Location = new Point(20, 20);     // specify rectangle relative position here (relative to parent container) 
      rect.Size = new Size(30, 30);      // specify rectangle size here 

      using (Brush brush = new SolidBrush(Color.Aqua)) // specify color here and brush type here 
      { 
       g.FillRectangle(brush, rect); 
      } 
     } 
    } 
} 

P.S. Ce n'est pas un exemple avancé, mais pourrait vous aider. Vous pouvez déplacer la taille, l'emplacement et la couleur etc. aux propriétés ainsi vous pouvez facilement les changer du concepteur.

P.S. P.S. Si vous avez besoin d'un rectangle non rempli, utilisez simplement l'objet Plume au lieu de Pinceau (vous pouvez également remplacer le rectangle par un objet plus approprié).

0

mettre le code suivant à l'endroit approprié:

Graphics g = panel1.CreateGraphics(); 
int redInt=255, blueInt=255, greenInt=255; //255 is example, give it what u know 
Pen p = new Pen(Color.FromArgb(redInt,blueInt,greenInt)); 
Rectangle r = new Rectangle(1, 1, 578, 38); 
g.DrawRectangle(p, r); 

et si vous vouliez dessiner le rectangle ailleurs, dire la forme, vous pouvez le faire g = this.CreateGraphics.