Switch d'image [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021
-
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
-
Bonjour,

Je souhaiterai réaliser un switch pour tester quelle image à ma pictureBox (via des if, je n'ai pas d'erreur, j'ai donc voulu créer un switch car j'ai 12 images différentes à tester) ainsi j'ai écris ce code pour les if :
if (tabEnvoiPiece[iLigne, iColonne].PictureBoxCase.Image == Roi.RoiBlanc)
            {

            }

Aucun soucis le code fonctionne bien.
Je passe donc sous un format switch avec ce code :

switch(tabEnvoiPiece[iLigne, iColonne].PictureBoxCase.Image)
            {
                case Roi.RoiBlanc:
                    //Mes instructions
                    break;
            }


Et là, erreur dans le "case" :

Une valeur de constante est attendue.
J'ai défini mon RoiBlanc comme ceci :
public static Image RoiBlanc = Properties.Resources.ROI_BLANC;


et je n'avais jamais rencontré ce soucis jusqu'à maintenant.
Si quelqu'un sait comment corriger ce problème, je vous en serait reconnaissant !

Bonne journée

3 réponses

Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
551
Bonjour

les clauses case d'un switch n'accepte que des valeurs de type
  • int
  • string
  • enum


Si par exemple, dans la propriété Tag de tes picturebox tu as saisie
"Roi Blanc"
alors tu peux faire

 switch(tabEnvoiPiece[iLigne, iColonne].PictureBoxCase.Image.Tag.ToString())
{
      case "Roi Blanc":
             //Mes instructions
             break;
}
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Merci de ta réponse, comme d'habitude, ta technique fonctionne !

C'est super sympa de répondre un dimanche, merci à tous ça fonctionne !
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137
encore un truc que je viens d'apprendre !
Merci Whis !
Messages postés
16035
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 juin 2021
551 >
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021

le swtich de c# hérite directement de celui de c++, et donc de c:
  • ces 3 types de valeurs
  • valeurs écrites dans la clause et pas issues de variables
  • l’exécution ne peut passer quand dans une seule clause (ça je ne sais pas si c’est aussi le cas en c++ et en c)


VB6 offrait plus de largesses, on pouvait mettre des nombres décimaux, des intervalles et si je me souviens bien des supérieurs et des inférieurs, et passer dans plusieurs clauses.
Quand Microsoft a créé VB.Net à partir de C#, ils ont restreint ces largesses mais pas au niveau de C#.

Au moment de la compilation je pense que c’est transformé en cascade de if
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137
Bonjour
switch(tabEnvoiPiece[iLigne, iColonne].PictureBoxCase.Image)
{
      case Roi.RoiBlanc:
             //Mes instructions
             break;
}

Dans le cas au-dessus Roi.RoiBlanc est une variable de type Image

switch(tabEnvoiPiece[iLigne, iColonne].PictureBoxCase.Image)
{
      case Properties.Resources.ROI_BLANC:
             //Mes instructions
             break;
}

Dans ce cas là c'est une constante : c'est l'image elle-même et non une variable de type Image
C'est tout !
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Merci beaucoup, je vais tester cela, du moins, si je trouve l'origine d'un autre bug, mais merci encore vb95!
Messages postés
16
Date d'inscription
jeudi 4 février 2021
Statut
Membre
Dernière intervention
14 février 2021

Bon, je viens de tester ta technique.

J'ai toujours la même erreur :/
Messages postés
2429
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
1 juin 2021
137
De rien !