从其他功能绘制到PictureBox

时间:2015-02-07 20:36:34

标签: c# picturebox

我正在尝试从另一个而非paint事件的函数绘制到PictureBox!

这是它的样子:

public void Draw(ref PictureBox picture_box)
{
    Graphics graphics = picture_box.CreateGraphics();

    for (int i = 0; i < ship.Count; ++i)
    {
        if (ship[i].form == FORM.RECTANGLE)
        {
            graphics.FillRectangle(ship[i].color, ship[i].rectangle);
        }
        else if (ship[i].form == FORM.ELLIPSE)
        {
            graphics.FillEllipse(ship[i].color, ship[i].rectangle);
        }
    }

    graphics.Dispose();
    picture_box.Refresh();
}

(ship是ship_part类的列表,包含一个Rectangle,一个FORM枚举(RECTANGLE,ELLIPSE)和一个画笔)

我在Form的构造函数中调用Draw:

public Form1()
{
    InitializeComponent();

    spaceship ship;
    ship_part part;

    ship = new spaceship();

    part = new ship_part(); //constructor initializes form to RECTANGLE and color to Brushes.Black
    part.rectangle = new Rectangle(50, 50, 10, 10);

    ship.ship.Add(part);

    ship.Draw(ref pictureBox1);
}

问题是没有绘制矩形。

到目前为止我尝试过:

我认为此行可能存在问题:

Graphics graphics = picture_box.CreateGraphics();

我认为我没有写入属于PictureBox的实际Graphics对象,因此我使Draw函数返回了被修改的Graphics对象。然后我从Picture Box Paint事件中调用了Draw函数,并尝试将该Graphics对象分配给作为PaintEventArgs中的参数传递的Graphics对象。但是PaintEvenArgs.Graphics对象是只读的。

谢谢!

0 个答案:

没有答案