2013-03-08 76 views
3

在我的代码中,我有一个带背景图片的PictureBox。我用它使用在不同类别的Windows窗体中绘制图片框

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Pen p = new Pen(Color.Turquoise, 2); 
    Rectangle r = new Rectangle(600, 300, 5, 5); 
    e.Graphics.DrawRectangle(p, r); 
    p.Dispose(); 
} 

现在在绘制一个矩形,我知道我需要做很多事情与这些矩形,并动态地创建他们,我已经创造了他们的一类,具有构造看像这样:

public MyRectangles(int x, int y) 
{ 
    Pen p = new Pen(Color.Turquoise, 2); 
    Rectangle r = new Rectangle(x, y, 5, 5); 
    e.Graphics.DrawRectangle(p, r); 
    p.Dispose(); 
} 

的问题是,在e.Graphics.DrawRectangle(p, r);e这里不存在。这是有道理的,但我明白为什么,但是我不知道要用什么来代替它,以再次绘制相同的图画框。

回答

4

尝试通过图形对象:

public MyRectangles(Graphics g, int x, int y) 
{ 
    Pen p = new Pen(Color.Turquoise, 2); 
    Rectangle r = new Rectangle(x, y, 5, 5); 
    g.DrawRectangle(p, r); 
    p.Dispose(); 
} 
+0

我应该通过什么确切的G? PictureBox本身? – 2013-03-08 16:55:54

+0

@MarekBuchtela从PictureBox绘画事件中,传递'e.Graphics'。 – LarsTech 2013-03-08 16:57:22

+0

是的,它是我的错,应该在上面的问题中说明了这一点 - 我不会从绘画事件中调用它,但也许在按下按钮之后,所以我不太确定如何获得e.Graphics那里。 – 2013-03-08 16:58:50