2012-12-08 70 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); 
    } 

享受! :)