2012-12-08 4 views
2

j'ai deux formes les formules 1 et 2.Remplacer méthode de peinture C#

Form 2 est héritant de la formule 1. Dans la formule 1 J'ai un on_Paint de méthode pour un groupe particulier dans lequel je dessine une image. Puisque le formulaire 2 hérite de Formulaire 1, le panneau est représenté comme peint avant même que je cours le programme (sur la conception du formulaire 2).

Le problème est que maintenant je dois peindre certaines choses sur cette image après que l'image est peinte dans le formulaire 2. Comment puis-je rendre cela possible?

Ceci est du code pour rendre le problème plus clair.

// Ce formulaire est 1 méthode 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); 
} 

// Ceci est la méthode que je veux être invoqué après la grille est peinte .. Il est situé dans la formule 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); 
} 

Cette méthode se trouve dans la formule 2 et appelle la méthode ci-dessus:

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

et j'appelle la méthode chec kWhichToPaint() après avoir créé une nouvelle instance de la formule 2 et le montrer:

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

où puis-je appeler cette méthode telle qu'elle est peinte après la grid_Paint est invoquée?

Merci pour votre aide :)

+1

Inscrivez à nouveau l'événement Paint de la grille dans le formulaire dérivé. Il (habituellement) fonctionne dans le bon ordre. ** Jamais ** utiliser CreateGraphics, utilisez l'objet e.Graphics que vous obtenez dans le gestionnaire d'événements Paint. –

+0

alors je viens de créer un autre événement de peinture pour le formulaire 2? Pourquoi, quel est le problème avec l'utilisation de CreateGraphics s'il vous plaît? – Bernice

+0

Créer un objet graphique supplémentaire quand ce dont vous avez besoin est déjà disponible n'est pas idéal, non? :) – Harsha

Répondre

1

Remplacer la méthode de peinture dans la deuxième forme et la méthode de peinture de base appel avant d'exécuter votre code formulaire 2.

+0

Oui, cela a fait l'affaire! Merci beaucoup! – Bernice

3

Ceci est la réponse à quiconque en aurait besoin!

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

Dans la formule 2:

protected override void grid_Paint(object sender, PaintEventArgs e) 
    { 
     checkWhichToPaint(); 
     base.grid_Paint(null, null); 
    } 

Amusez-vous! :)

Questions connexes