Gildeplomb
Messages postés102Date d'inscriptionsamedi 29 décembre 2012StatutMembreDernière intervention24 mars 2021
-
11 févr. 2017 à 10:28
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023
-
11 févr. 2017 à 17:30
Bonjour,
J'ai un code qui fonctionne avec strict off mais pas avec strict on.
C'est une jeu de cartes, les cartes sont en ressource
Voici le code
Dim I, X, Y, L, Carte As Integer, K As Bitmap For L = 1 To 7 Threading.Thread.Sleep(Delai) I = generator.Next(1, ListBox1.Items.Count - 1)
X = Joueur(L).XPos Y = Joueur(L).YPos I = CInt(ListBox1.Items(I)) ListBox1.Items.Remove(I) CarteSortie(I) = CarteSortie(I) - 1
K = My.Resources.ResourceManager.GetObject(I.ToString("_00")) ' <------ erreur avec option strict on , fonctionne avec strict off
Carte = CarteValeur(I Mod 13) Joueur(L).Carte1 = Carte Joueur(L).Max = Carte Joueur(L).Min = Carte If Carte = 1 Then Joueur(L).Max = Joueur(L).Max + 10 Cre_Carte(K, X, Y) ' affichage carte pos x,y Me.Refresh() Next
Que dois je faire pour faire fonctionner ce code avec strict on
L'erreur est :
Erreur BC30512 Option Strict On interdit les conversions implicites de 'Object' en 'PictureBox'.
Avec option strict off, tu laisses le compilateur se la jouer comme il veut avec les conversions de types.
La plupart du temps ça marche, mais je jour ou ça va bugger ce sera un enfer de trouver ou et pourquoi.
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié par vb95 le 11/02/2017 à 17:50
Bonsoir
1) Option Explicit t'oblige à déclarer toutes les variables .
Exemple :
Dim NombreLettres as integer
Plus loin dans le code
NombresLettres = 26
Le Dim dimensionne et déclare la variable . Par contre lorsque que tu l'initialises tu fais une faute d'écriture avec un "s" supplémentaire : NombresLettres n'est pas dimensionné
2) Option Strict t'oblige à faire toutes les conversions nécessaires et d'éviter les liaisons tardives
Dim NombreLettres as Integer = Textbox1.Text
est incorrect mais le compilateur s'en débrouille quant même . La variable NombreLettres est un entier sur 32 bits alors que Textbox1.Text contient une chaine de caractères ( String en anglais)
La bonne syntaxe est
Dim NombreLettres as Integer = Convert.ToInt32(Textbox1.Text)
on convertit le contenu de TextBox1 en variable entière
C'est comme dans ton code : un Bitmap n'est pas une PictureBox ( un Bitmap est la représentation graphique d'une image contenue dans une PictureBox alors que la PictureBox est un contrôle )