覆盖绘制方法C#

时间:2012-12-08 16:53:02

标签: c# forms paint

我有两种形式表格1和表格2。

表单2继承自表单1.在表单1中,我为特定面板设置了on_Paint方法,其中我正在绘制图像。由于表单2继承自表单1,因此在我运行程序之前(在表单2的设计上),面板显示为已绘制。

问题是,现在我需要在表单2中绘制图像后在此图像上绘制一些内容。我怎样才能实现这一点?

这是一些使问题更加清晰的代码。

//这是Form 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]);
            }
        }
    }
}

我在创建Form 2的新实例并显示它之后调用checkWhichToPaint()方法:

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

在哪里可以调用此方法,例如在调用grid_Paint之后绘制它?

感谢您的帮助:)

2 个答案:

答案 0 :(得分: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);
   }

享受! :)

答案 1 :(得分:1)

在运行表单2代码之前,覆盖第二种形式的paint方法并调用基础绘制方法。