2012-12-08 91 views
2

我有兩種形式形式1和形式2。覆蓋漆方法C#

表2從表1繼承在表格1我有一個特定面板,其中我繪製圖像的方法on_Paint。由於表格2是從表格1繼承的,所以在我甚至運行該程序(在表格2的設計上)之前,該表格被顯示爲繪製。

問題是,現在我需要在表單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 kWhichToPaint()創建表單2的新實例,並顯示它後:

Tournament tournament = new Tournament(); 
tournament.LoadGame(); 
tournament.Show(); 
tournament.checkWhichToPaint(); 

我在哪裏可以調用這個方法,比如它的grid_Paint塗上之後被調用?

感謝您的幫助:)

+1

在派生形式中再次訂閱網格的Paint事件。它(通常)以正確的順序運行。 **從不**使用CreateGraphics,使用您在Paint事件處理程序中獲得的e.Graphics對象。 –

+0

所以我只是爲Form 2創建另一個繪畫事件?爲什麼,請使用CreateGraphics有什麼問題? – Bernice

+0

當你需要的東西已經可用時創建一個額外的圖形對象並不理想,對吧? :) – Harsha

回答

1

覆蓋在第二種形式paint方法和調用基塗料的方法你運行你的表格2的代碼之前。

+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); 
    } 

享受! :)