我有兩種形式形式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塗上之後被調用?
感謝您的幫助:)
在派生形式中再次訂閱網格的Paint事件。它(通常)以正確的順序運行。 **從不**使用CreateGraphics,使用您在Paint事件處理程序中獲得的e.Graphics對象。 –
所以我只是爲Form 2創建另一個繪畫事件?爲什麼,請使用CreateGraphics有什麼問題? – Bernice
當你需要的東西已經可用時創建一個額外的圖形對象並不理想,對吧? :) – Harsha