2010-04-15 6 views
3

Donc, j'essaie de faire un programme MasterMind comme sorte d'exercice.Windows Formulaire de changement de couleur

  • Champ de 40 boîtes d'image (ligne de 4, 10 lignes)
  • 6 boutons (rouge, vert, orange, jaune, bleu, violet)

Lorsque j'appuie sur un de ces boutons (Supposons le rouge), puis une boîte d'image devient rouge.
Ma question est comment est-ce que je peux parcourir toutes ces images?
Je peux le faire fonctionner, mais seulement si j'écris:
Et ce n'est pas possible d'écrire cela, cela me prendrait d'innombrables lignes qui contiennent fondamentalement la même chose.

 private void picRood_Click(object sender, EventArgs e) 
    { 
     UpdateDisplay(); 
     pb1.BackColor = System.Drawing.Color.Red; 
    } 

Appuyez sur le bouton rouge -> première zone d'image devient rouge
Appuyez sur le bouton bleu -> seconde zone d'image devient bleu
sur le bouton orange -> troisième zone d'image devient orange
Et ainsi de suite. J'ai eu un programme similaire précédent qui simule un feu de circulation, là je pourrais attribuer une valeur à chaque couleur (0 rouge, orange 1, vert 2).
Est-ce que quelque chose de similaire est nécessaire ou comment exactement je adresse toutes ces boîtes d'image et de les faire correspondre au bouton approprié.

Cordialement.

Répondre

0

Je voudrais utiliser un panneau que le contrôle conteneur pour toutes les boîtes pic, puis:

foreach (PictureBox pic in myPanel.Controls) 
{ 
    // do something to set a color 
    // buttons can set an enum representing a hex value for color maybe...??? 
} 
0

Je ne voudrais pas utiliser PictureBoxes, mais utiliserait un seul picturebox, dessiner directement sur l'aide de GDI. Le résultat est beaucoup plus rapide, et il vous permettra d'écrire des jeux plus complexes impliquant des sprites et des animations;)

Il est très facile d'apprendre comment.

+0

ont vraiment aucune idée de ce que vous parlez, à quel point il peut être =). – Sef

1

Je n'utiliserais pas de contrôles, mais vous pouvez utiliser un seul PictureBox et gérer l'événement Paint. Cela vous permet de dessiner à l'intérieur de ce PictureBox afin que vous puissiez gérer rapidement toutes vos boîtes.

Dans le code:

// define a class to help us manage our grid 
public class GridItem { 
    public Rectangle Bounds {get; set;} 
    public Brush Fill {get; set;} 
} 

// somewhere in your initialization code ie: the form's constructor 
public MyForm() { 
    // create your collection of grid items 
    gridItems = new List<GridItem>(4 * 10); // width * height 
    for (int y = 0; y < 10; y++) { 
     for (int x = 0; x < 4; x++) { 
      gridItems.Add(new GridItem() { 
       Bounds = new Rectangle(x * boxWidth, y * boxHeight, boxWidth, boxHeight), 
       Fill = Brushes.Red // or whatever color you want 
      }); 
     } 
    } 
} 

// make sure you've attached this to your pictureBox's Paint event 
private void PictureBoxPaint(object sender, PaintEventArgs e) { 
    // paint all your grid items 
    foreach (GridItem item in gridItems) { 
     e.Graphics.FillRectangle(item.Fill, item.Bounds); 
    } 
} 

// now if you want to change the color of a box 
private void OnClickBlue(object sender, EventArgs e) { 
    // if you need to set a certain box at row,column use: 
    // index = column + row * 4 
    gridItems[2].Fill = Brushes.Blue; 
    pictureBox.Invalidate(); // we need to repaint the picturebox 
} 
Questions connexes