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