2012-12-29 99 views
0

我需要繪製圍繞在運行期間動態創建的面板的邊緣的矩形繪製。首先,我用六進制代碼獲得顏色。矩形不會在面板

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

現在,我嘗試使用此代碼來繪製矩形:

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

但它確實沒有什麼,沒有我使用,我發現這裏的計算器在similiar問題代碼轉換成ARGB出現矩形。 此代碼被包含在碼的一部分創建面板本身,並與一些對照(組合框,按鈕等)填充。我是否需要使用類似於panel.Controls.Add(r);的方式將矩形添加到面板? (試過,當然矩形不是控制,因此不工作)

+0

你在畫什麼功能。 –

+0

@MarkHall創建面板的方法。該方法位於公共Form1()中。 –

+0

嘗試面板繪製事件,看看是否適合你。同時驗證您獲得有效的顏色。 –

回答

1

嘗試轉移圖形描繪成片油漆的事件,因爲你創造這些動態地匿名事件處理程序應該可以很容易。

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

是的,這工作:)謝謝。 –

+0

我喜歡這種方式,它的功能就像一個魅力。一個問題,但:如果我想以後刪除此事件處理程序,我不能使用匿名事件處理程序,正確?我將如何使用具有指定事件處理程序的相同代碼? – physicalattraction