2012-12-10 179 views
1

我需要在面板中繪製一個矩形。我不知道顏色,我在運行時獲取顏色,我不知道如何將顏色設置爲固定值,其次 - 當我嘗試繪製矩形時,它什麼也不做。這裏是我的代碼應該繪製矩形(逸岸它在另一個項目,但是那只是在一個普通的形式,而不是到面板)在面板上繪製一個矩形

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

所以我需要用一個變量來代替(Brushes.Blue)我需要在此代碼中設置的座標面板上繪製矩形。

回答

1

構造您Pen使用Pen(Color)構造函數,而不是一個Pen(Brush)的。然後,一旦你知道它,你就可以定義你的顏色。

0

您應該在面板的Paint事件中執行繪製。每當Windows決定重新繪製面板時都會發生此事件,並且PaintEventArgs包含可以繪製矩形的Graphics對象。

Brush是一個抽象類,但你可以使用SolidBrush對象在運行時創建一個定製顏色刷:

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

給你:

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

當你知道顏色:

_color = ... 
iKnowDaColor = true; 

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

我沒有測試過這一點,但應該給你的基本理念。

0

我認爲這樣做的更好方法是擴展Panel類並添加一些自定義的OnPaint事件邏輯。

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.這不是一個高級的例子,但可以幫助你。您可以移動大小,位置和顏色等屬性,以便您可以輕鬆地從設計師更改它們。

P.S.附:如果你需要一個未填充的矩形,只需使用Pen對象而不是Brush(你也可以將FillRectangle改爲更適合的東西)。

0

把下面的代碼中的適當位置:

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

,如果你想繪製矩形別的地方,說的形式,你可以做g = this.CreateGraphics