private void makeMoleVisable(int mole, PictureBox MoleHill) { switch (mole) { case 1: if (p01.Image == pmiss.Image && MoleHill.Image == pHill.Image) { molesmissed ++; } p01.Image = MoleHill.Image; break; case 2: if (p02.Image == pmiss.Image && MoleHill.Image == pHill.Image) { molesmissed++; } p02.Image = MoleHill.Image; break; ** I have 36 of these case statements each one for another for a different picture box; how do I group them all into one case statement so my code can be more efficient**
4 Réponses :
On dirait que votre cas est utilisé pour sélectionner une image, vous appliquez toujours le même traitement à l'image.
Comment diriez-vous de stocker l'image dans une liste ou un dictionnaire, utilisez le quelque chose comme p> si les images sont toutes numérotées de manière séquentielle, une liste est légèrement plus efficace. . N'oubliez pas que les indices de liste sont 0. Si vous numérotez vos images de 1, comme cela semble être le cas de votre code> Switch code> ( supposé dans l'exemple suivant em>), n'oubliez pas de régler en conséquence. P> mole code> Valeur pour récupérer la bonne image, puis traiter cette image? p>
List<PictureBox> images;
int index = mole - 1; // Assumes mole starts with 1, so adjust to 0-based index
var image = images[index];
Et traversez les moles dans un pour code> boucle.
Ils cherchent à être toutes les clés entier séquentielles, donc une liste code> serait plus logique qu'un dictionnaire
code>.
Oui, ils pourraient bien être. Je mentionne Liste code> en tant que structure de données candidates dans ma réponse, mais je suis allé avec
Dictionnaire code> dans l'exemple de code parce que je ne voulais pas faire cette hypothèse.
@Servy: mis à jour pour être plus explicite.
Vous pouvez mettre vos boîtes d'images dans une liste, puis y accéder par index:
On dirait que mole code> peut être basé sur 1, auquel cas décalage sur l'index de la liste peut être nécessaire.
pbs.addrange (this.controls.oftypepe
La chose qui diffère dans le commutateur code> code> est la variable PN. Au lieu de mettre ces objets dans des variables discrètes, créez un tableau que vous pouvez indexer dans: et ensuite votre code peut ressembler à ceci: p> if (p[mole-1].Image == pmiss.Image && MoleHill.Image == pHill.Image)
{
molesmissed ++;
}
p[mole-1].Image = MoleHill.Image
... éventuellement avec un petit contrôle de la sécurité.
Essayez ceci:
string ControlIdSuffix = mole < 10 ? "0" : "" + mole.ToString(); Control[] picBoxes = this.Controls.Find("p" + ControlIdSuffix, true); if (picBoxes.Length > 0) { PictureBox p = picBoxes[0] as PictureBox; if (p != null) { if (p.Image == pmiss.Image && MoleHill.Image == pHill.Image) molesMissed++; p.Image = MoleHill.Image; } }
Considérez ceci sur votre première ligne: (ex) 1.Tostring ("00") -> "01" code>
Les gens ont exprimé ceci ci-dessous, mais que diriez-vous de passer l'objet image (c'est-à-dire P01, P02) comme un argument de la fonction et «foreach» image de la mole appelant la fonction?