我需要在面板中绘制一个矩形。我事先不知道颜色,我在运行时得到颜色,我不知道如何将颜色设置为固定值,其次 - 当我尝试绘制矩形时,它什么也没做。这是我应该绘制矩形的代码(事实上它在另一个项目中执行,但那只是一个普通的形式,而不是一个面板)
Graphics g;
g = CreateGraphics();
Pen p;
Rectangle r;
p = new Pen(Brushes.Blue);
r = new Rectangle(1, 1, 578, 38);
g.DrawRectangle(p, r);`
所以我需要用变量替换(Brushes.Blue),我需要在这个代码中设置的坐标上的面板中绘制矩形。
答案 0 :(得分:1)
使用Pen(Color)
构造函数而不是Pen
构造函数构建您的Pen(Brush)
。然后,您可以在知道后定义颜色。
答案 1 :(得分:0)
您应该在面板的Paint
事件中执行绘图。只要窗口决定重新绘制面板,PaintEventArgs
包含一个Graphics
对象就可以绘制矩形,就会发生此事件。
Brush
是一个抽象类,但您可以使用SolidBrush
对象在运行时创建自定义彩色画笔:
int red = 255;
int green = 0;
int blue = 0;
Brush myBrush = new SolidBrush(Color.FromArgb(red, green, blue));
答案 2 :(得分:0)
你在这里:
private Color _color; // save the color somewhere
private bool iKnowDaColor = false; // this will be set to true when we know the color
public Form1() {
InitializeComponents();
// on invalidate we want to be able to draw the rectangle
panel1.Paint += new PaintEventHandler(panel_Paint);
}
void panel_Paint(object sender, PaintEventArgs e) {
// if we know the color paint the rectangle
if(iKnowDaColor) {
e.Graphics.DrawRectangle(new Pen(_color),
1, 1, 578, 38);
}
}
当你知道颜色时:
_color = ...
iKnowDaColor = true;
// causes the panel to invalidate and our painting procedure to be called
panel.Invalidate();
我没有对此进行测试,但应该给你基本的想法。
答案 3 :(得分:0)
我认为更好的方法是扩展Panel类并添加一些自定义的OnPaint事件逻辑。
public class PanelRect : Panel
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (Graphics g = e.Graphics)
{
Rectangle rect = ClientRectangle;
rect.Location = new Point(20, 20); // specify rectangle relative position here (relative to parent container)
rect.Size = new Size(30, 30); // specify rectangle size here
using (Brush brush = new SolidBrush(Color.Aqua)) // specify color here and brush type here
{
g.FillRectangle(brush, rect);
}
}
}
}
P.S。这不是一个高级示例,但可能对您有所帮助。您可以将大小,位置和颜色等移动到属性,以便您可以轻松地从设计器中更改它们。
P.S。附:如果你需要一个非填充矩形,只需使用Pen对象而不是Brush(你也可以将FillRectangle更改为更合适的东西)。
答案 4 :(得分:0)
将以下代码放在适当的位置:
Graphics g = panel1.CreateGraphics();
int redInt=255, blueInt=255, greenInt=255; //255 is example, give it what u know
Pen p = new Pen(Color.FromArgb(redInt,blueInt,greenInt));
Rectangle r = new Rectangle(1, 1, 578, 38);
g.DrawRectangle(p, r);
如果您想在其他地方绘制矩形,请说明表单,您可以g = this.CreateGraphics
。