0

我需要在运行时动态创建的面板边缘绘制一个矩形。首先,我得到了十六进制代码的颜色。我正在使用我在 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);?(试过了,当然矩形不是控件,所以它不起作用)

4

1 回答 1

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);
}
于 2012-12-29T02:08:36.707 回答