MikeB의 대답은 정확하지만 OP는 여전히 혼란스럽고 사람들은 여전히 이것을보고 있으므로 확실한 답변 (예, 8 년 후)을 추가하고 있습니다.
마이크의 방법
private void pictureBox1_Paint(object sender, PaintEventArgs e)
는 적절한 시간에 호출 할 필요가있는 독립형 방법이다. 이 작업을 수행하려면 OnPaint 이벤트 디스패처에 등록해야하므로 OnPaint 이벤트가 발생할 때마다 호출됩니다. 이렇게하려면 당신은 당신의 클래스의 생성자와 같이 몇 가지 편리한 장소에 다음 줄을 추가합니다 :
OnPaint += pictureBox1_Paint;
이 방법은 OK,하지만 당신은 당신이 정말로 그것을 당신을 다치게 할 것이다 그리기 성능을 필요로하는 곳에 도착하면, PaintEventArgs가 생성되어 전달 될 때 추가 비용이 발생하기 때문입니다. 더 나은 방법은 부모 클래스의 OnPaint 메서드를 재정의하고 드로잉 코드를 직접 OnPaint 메서드에 넣는 것입니다. 그렇게하면 이벤트 처리기를 연결하지 않아도되고 더 빠르게 실행됩니다. 코드는 거의 동일하게 보입니다.
protected override void OnPaint (PaintEventArgs 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 컨트롤에서 그리기를 거의 권장하지 않습니다. 많은 사람들이 그렇게하지만 많은 전문가들이 그렇게하지는 않습니다. 그리기 캔버스로 디자인되지는 않았으며 모든 폼 기반 컨트롤과 동일한 기능을 상속 받았으며 복잡한 기능을 추가하고 유용한 기능을 추가하지 않고 속도를 늦 춥니 다. 그림 상자를 제거하고 그림 상자를 보유하고있는 폼이나 패널에 직접 그리는 경우 더 행복해집니다.
+1 감사합니다! 이것은 삶의 게임과 관련이 있습니다. 하지만 왜'Form1_Paint'를 사용해야하는지 모르겠습니다.'pictureBox' 이벤트 안에 있을까요? 나는 C#을 처음 접했고 귀하의 도움이 감사 할 것입니다. – techAddict82
그림 상자의 페인트 이벤트 여야합니다. 내 사과 – MikeB
좋아, 고마워. 나는 그리드를 전혀 보이지 않게하고있다. 그러나 코드도 오류가 없습니다. 그래서 나는 그 문제가 뭔지 확실하지 않다. – techAddict82