在面板上绘制一个矩形

时间:2012-12-10 19:33:23

标签: c# drawing

我需要在面板中绘制一个矩形。我事先不知道颜色,我在运行时得到颜色,我不知道如何将颜色设置为固定值,其次 - 当我尝试绘制矩形时,它什么也没做。这是我应该绘制矩形的代码(事实上它在另一个项目中执行,但那只是一个普通的形式,而不是一个面板)

    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),我需要在这个代码中设置的坐标上的面板中绘制矩形。

5 个答案:

答案 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