2

Form 1 と Form 2 の 2 つのフォームがあります。

フォーム 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);
 }

このメソッドは Form 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 が呼び出された後にペイントされるように、このメソッドをどこで呼び出すことができますか?

ご協力いただきありがとうございます :)

4

2 に答える 2

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

楽しみ !:)

于 2012-12-09T09:51:13.253 に答える
1

フォーム 2 のコードを実行する前に、2 番目のフォームのペイント メソッドをオーバーライドし、ベースのペイント メソッドを呼び出します。

于 2012-12-09T09:13:58.473 に答える