MikeB 接受的答案当然是正确的,但是 OP 仍然感到困惑,人们仍然看到这一点,所以我添加了一个澄清的答案(是的,8 年后)。
迈克的方法
private void pictureBox1_Paint(object sender, PaintEventArgs e)
是一个独立的方法,需要在正确的时间调用。要做到这一点,您需要将它注册到 OnPaint 事件调度程序,以便在 OnPaint 事件发生时调用它。为此,您可以将以下行放入某个方便的位置,例如类的构造函数中:
OnPaint += pictureBox1_Paint;
这种方法是可以的,但是如果你到达你真正需要绘图性能的地方,它会伤害你,因为它需要额外的成本来构建和传递给你的 PaintEventArgs。更好的方法是重写父类的 OnPaint 方法,将你的绘图代码直接放在 OnPaint 方法中。这样您就不必连接任何事件处理程序并且它运行得更快。代码看起来几乎一样:
protected override void OnPaint (PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
int numOfCells = 200;
int cellSize = 5;
Pen p = new Pen(Color.Black);
for (int y = 0; y < numOfCells; ++y)
{
g.DrawLine(p, 0, y * cellSize, numOfCells * cellSize, y * cellSize);
}
for (int x = 0; x < numOfCells; ++x)
{
g.DrawLine(p, x * cellSize, 0, x * cellSize, numOfCells * cellSize);
}
}
最后一个建议:在 PictureBox 控件中绘图几乎从来都不是一个好主意。很多人都这样做,但没有多少专家会这样做。它们并非设计为绘图画布——它们只是继承了所有基于表单的控件所具有的相同功能——它们增加了复杂性并减慢了您的速度,而根本没有添加任何有用的功能。如果您摆脱图片框并直接在保存图片框的表单或面板上绘图,您会更快乐。