我有两种形式形式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