2012-12-29 55 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