1

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

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

4

5 回答 5

1

Pen使用Pen(Color)构造函数而不是构造函数来构造你的Pen(Brush)。然后,一旦您知道了颜色,就可以定义它。

于 2012-12-10T19:44:24.317 回答
0

Paint您应该在面板的情况下进行绘图。每当 windows 决定是时候重新绘制面板并且PaintEventArgs包含一个Graphics可以在其上绘制矩形的对象时,就会发生此事件。

Brush一个抽象类,但您可以使用该SolidBrush对象在运行时创建自定义彩色画笔:

int red = 255;
int green = 0;
int blue = 0;
Brush myBrush = new SolidBrush(Color.FromArgb(red, green, blue));
于 2012-12-10T19:44:21.073 回答
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();

我没有对此进行测试,但应该给你基本的想法。

于 2012-12-10T19:44:44.163 回答
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);
            }
        }
    }
}

PS这不是一个高级示例,但可能会对您有所帮助。您可以将大小、位置和颜色等移动到属性,以便您可以轻松地从设计师那里更改它们。

PSPS 如果您需要一个未填充的矩形,只需使用 Pen 对象而不是 Brush(您也可以将 FillRectangle 更改为更合适的东西)。

于 2012-12-10T19:58:53.957 回答
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

于 2012-12-10T20:05:15.297 回答