2013-09-12 5 views
0

Я хочу вызвать событие paint, когда я нажму кнопку. У меня есть следующее:C# - вызов обработчика события рисования

private void btnDrawMap_Click(object sender, EventArgs e) 
     { 
      rows = Convert.ToInt32(this.numRows); 
      cols = Convert.ToInt32(this.numCols); 


      defineCellWallsList(); 
      defineCellPositionsList(); 
      pictureBox1_Paint_1; 
     } 

Я не думаю, что вы можете так назвать. Все pictureBox1_Paint_1 делает:

private void pictureBox1_Paint_1(object sender, PaintEventArgs e) 
     { 
      myGameForm.drawMap(e, mapCellWallList, mapCellPositionList); 
     } 

Так что, если я могу назвать myGameForm.drawMap вместо этого, это было бы хорошо. Что:

public void drawMap(PaintEventArgs e, List<List<int>> walls, List<List<int>> positions) 
     { 
      // Create a local version of the graphics object for the PictureBox. 
      Graphics g = e.Graphics; 

      // Loop through mapCellArray. 
      for (int i = 0; i < walls.Count; i++) 
      { 
       int[] mapData = getMapData(i, walls, positions); 
       int column = mapData[0]; 
       int row = mapData[1]; 
       int right = mapData[2]; 
       int bottom = mapData[3]; 

       g.DrawLine(setPen(right), column + squareSize, row, column + squareSize, row + squareSize); 
       g.DrawLine(setPen(bottom), column + squareSize, row + squareSize, column, row + squareSize); 
      } 
      drawMapEdges(e, walls, positions); 
     } 

Это требует paintEventArg и btnDrawMap_Click требует eventArg, поэтому я изменил параметр btnDrawMap_Click eventArg в paintEventArg, однако он имеет ошибку о том, что btnDrawMap_Click не перегруженный метод, который принимает EventHandler.

Любая помощь приветствуется, спасибо.

ответ

4

Просто позвоните Invalidate(), которая заставляет PictureBox перекроить себя, тем самым вызывая ваше Paint событие:

pictureBox1.Invalidate(); 
+0

Спасибо! Работает как шарм. – user2602079

Смежные вопросы