2012-12-08 3 views
2

I 내가 화상을 묘화하고있는 특정 패널을위한 방법 on_Paint이 형태 1에서 형태 1. 상속되어 두 가지 형태의 형태 1 형 및 2무시 페인트 방법 C 번호

양식이있다. 양식 2는 양식 1을 상속하므로 양식을 디자인 할 때도 패널이 페인트 된 것으로 표시됩니다.

문제는 이제 이미지가 양식 2에 그려진 후에이 이미지 위에 몇 가지 그림을 그릴 필요가 있다는 것입니다. 어떻게하면 가능합니까?

이것은 더 명확한 문제를 만들기위한 코드입니다.

//이 양식 1 on_Paint 방법입니다

private void grid_Paint(object sender, PaintEventArgs e) 
{ 
    Image img = Image.FromFile(resourcesPath+ "grid.fw.png"); 

    gridGraphics = grid.CreateGraphics(); 
    gridGraphics.DrawImage(img, 0, 0, 650, 550); 
} 

//이이이 양식 1에 위치하고 있습니다 .. 내가 격자가 그려진 후 호출 할 방법 :

public void paintSprites(int row, int column, int value) 
{ 
    int yLoc = 0; 
    int xLoc = 0; 
    Graphics g = grid.CreateGraphics(); 

    switch (row) 
    { 
     case 0: yLoc = 435; break; 
     case 1: yLoc = 355; break; 
     case 2: yLoc = 275; break; 
     case 3: yLoc = 195; break; 
     case 4: yLoc = 115; break; 
     case 5: yLoc = 35; break; 
    } 

    switch (column) 
    { 
     case 0: xLoc = 35; break; 
     case 1: xLoc = 120; break; 
     case 2: xLoc = 205; break; 
     case 3: xLoc = 290; break; 
     case 4: xLoc = 375; break; 
     case 5: xLoc = 460; break; 
     case 6: xLoc = 545; break; 
    } 

    if (value == 1) 
    { 
     g.DrawImage(red, xLoc, yLoc, 65, 65); 
    } 
    else g.DrawImage(gold, xLoc, yLoc, 65, 65); 
} 

이 방법은 양식 2에 위치하고 있으며 방법은 위의 호출

public void checkWhichToPaint() 
{ 
    for (int i = 0; i < ROWS; i++) 
    { 
     for (int j = 0; j < COLUMNS; j++) 
     { 
      if (gridMap[i, j] != 0) 
      { 
       paintSprites(i, j, gridMap[i, j]); 
      } 
     } 
    } 
} 

나는 메소드 CHEC를 호출하고

나는 그것이 grid_Paint 후 페인트 등이 방법을 호출 할 수 있습니다
Tournament tournament = new Tournament(); 
tournament.LoadGame(); 
tournament.Show(); 
tournament.checkWhichToPaint(); 

가 호출 : 양식 2의 새로운 인스턴스를 생성하고이를 표시 한 후 kWhichToPaint()? 당신의 도움에 대한

감사합니다 :)

+1

파생 된 폼에서 그리드의 Paint 이벤트를 다시 구독하십시오. 그것은 (보통) 올바른 순서로 실행됩니다. ** 절대 ** CreateGraphics를 사용하려면 Paint 이벤트 핸들러에서 가져온 e.Graphics 객체를 사용하십시오. –

+0

그래서 Form 2에 다른 페인트 이벤트를 만드시겠습니까? 왜, CreateGraphics를 사용하여 무엇이 잘못 되었습니까? – Bernice

+0

당신이 필요로하는 것이 이미 사용 가능할 때 여분의 그래픽 객체를 만드는 것이 이상적이지 않은가? :) – Harsha

답변

1

재정의 두 번째 형태의 페인트 방법 및 양식이 코드를 실행하기 전에 기본 페인트 메소드를 호출합니다.

+0

그 트릭을 한 네! 고마워요! – Bernice

3

누구나 답변 할 수 있습니다! 양식 1에서

:

protected virtual void grid_Paint(object sender, PaintEventArgs e) 
    { 
     Image img = Image.FromFile(resourcesPath+ "grid.fw.png"); 

     gridGraphics = grid.CreateGraphics(); 
     gridGraphics.DrawImage(img, 0, 0, 650, 550); 
    } 

양식 2에서 :

protected override void grid_Paint(object sender, PaintEventArgs e) 
    { 
     checkWhichToPaint(); 
     base.grid_Paint(null, null); 
    } 

즐기십시오! :)