Plumal
Messages postés16Date d'inscriptionjeudi 4 février 2021StatutMembreDernière intervention14 février 2021
-
14 févr. 2021 à 09:06
Whismeril
Messages postés19034Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 mai 2024
-
14 févr. 2021 à 10:32
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 !
Whismeril
Messages postés19034Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 mai 2024656 14 févr. 2021 à 09:41
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;
}
Plumal
Messages postés16Date d'inscriptionjeudi 4 février 2021StatutMembreDernière intervention14 février 2021 14 févr. 2021 à 09:49
Merci de ta réponse, comme d'habitude, ta technique fonctionne !
C'est super sympa de répondre un dimanche, merci à tous ça fonctionne !
vb95
Messages postés3473Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention30 avril 2024169 14 févr. 2021 à 09:58
encore un truc que je viens d'apprendre !
Merci Whis !
Whismeril
Messages postés19034Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 2 mai 2024656
>
vb95
Messages postés3473Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention30 avril 2024 Modifié le 14 févr. 2021 à 10:32
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
vb95
Messages postés3473Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention30 avril 2024169 Modifié le 14 févr. 2021 à 09:33
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 !
Plumal
Messages postés16Date d'inscriptionjeudi 4 février 2021StatutMembreDernière intervention14 février 2021 14 févr. 2021 à 09:35
Merci beaucoup, je vais tester cela, du moins, si je trouve l'origine d'un autre bug, mais merci encore vb95!
Plumal
Messages postés16Date d'inscriptionjeudi 4 février 2021StatutMembreDernière intervention14 février 2021 14 févr. 2021 à 09:37
14 févr. 2021 à 09:49
C'est super sympa de répondre un dimanche, merci à tous ça fonctionne !
14 févr. 2021 à 09:58
Merci Whis !
Modifié le 14 févr. 2021 à 10:32
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