2012-10-03 124 views
2

我目前正在使用pictureBox。我很難在大約2 x 2平方的圖片框上繪製網格。現在下面的代碼只給了我一條線。我怎樣才能在pictureBox的頂部繪製完整的網格?在PictureBox上繪製網格

CODE:

private Graphics g1; 

    public Form1() 
    { 
     InitializeComponent(); 


     pictureBox1.Image = new Bitmap(500, 500); 
     g1 = Graphics.FromImage(this.pictureBox1.Image); 
     Pen gridPen = new Pen(Color.Black, 2); 
     g1.DrawLine(gridPen, 0, 0, 100, 100); 

    } 

這個我想什麼來完成: enter image description here

回答

7

我發現這個問題: Efficiently draw a grid in Windows Forms

下面是它的要點:

private void pictureBox1_Paint(object sender, 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); 
      } 
     } 

相應的自定義

+0

+1謝謝!這是參考生命的遊戲。但我不知道爲什麼或如何使用'Form1_Paint'我認爲它將在事件'pictureBox'內?我對C#相當陌生,不勝感激。 – techAddict82

+0

這應該是圖片框的繪畫事件。我的道歉 – MikeB

+0

好的,謝謝。我沒有任何網格出現。但代碼也沒有錯誤。所以我不確定最新的問題。 – techAddict82

0

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) 
     { 
      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控件中繪圖幾乎不是一個好主意。很多人都這樣做,但並不是很多專家會那樣做。它們沒有被設計成一個繪圖畫布 - 它們只是繼承了所有基於窗體的控件所具有的相同功能 - 而且它們增加了複雜性並減慢了你的速度,而沒有添加任何有用的功能。如果您擺脫了圖片框,並且直接在持有圖片框的窗體或面板上繪圖,您將會更加快樂。