矩形不会画在面板上

时间:2012-12-29 01:46:50

标签: c# drawing panel rectangles

我需要在运行时动态创建的面板边缘周围绘制一个矩形。首先,我得到一个六进制代码的颜色。我正在使用我在stackoverflow上找到的代码将其转换为ARGB,类似于:

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

但它什么也没做,没有矩形出现。 此代码包含在创建面板本身的代码的一部分中,并使用一些控件(组合框,按钮等)填充它。我是否需要使用panel.Controls.Add(r);之类的内容将矩形添加到面板? (试过,当然矩形不是一个控件所以它不起作用)

1 个答案:

答案 0 :(得分:1)

尝试将Graphics绘图移动到面板绘制事件中,因为动态创建这些动画会使匿名事件处理程序变得容易。

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