我正在尝试从另一个而非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对象是只读的。
谢谢!