Option strict on / off [Résolu]

Gildeplomb 87 Messages postés samedi 29 décembre 2012Date d'inscription 10 août 2017 Dernière intervention - 11 févr. 2017 à 10:28 - Dernière réponse : vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention
- 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'.

D'avance merci
Afficher la suite 
87Messages postés samedi 29 décembre 2012Date d'inscription 10 août 2017 Dernière intervention

6 réponses

Répondre au sujet
Whismeril 10523 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 11 févr. 2017 à 12:03
0
Utile
Bonjour

tout d'abord, ça c'est pas terrible.
Threading.Thread.Sleep(Delai)

Il vaut mieux utiliser un Timer, qui créera son propre Thread, que bloquer le thread prinicpal.


Ensuite le message d'erreur parle de PictureBox, alors que K est un Bitmap.
L'erreur apparait bien là ou tu as mis la flèche?
Commenter la réponse de Whismeril
Gildeplomb 87 Messages postés samedi 29 décembre 2012Date d'inscription 10 août 2017 Dernière intervention - 11 févr. 2017 à 12:38
0
Utile
Merci pour la réponse

Pour le timer je changerai ça bien que ça ne soit pas important ( c'est une distribution de cartes ) mais vaut mieux prendre des bonnes habitudes

L'erreur est bien là où j'ai mis la flèche. C'est souligné en rouge lors de l'exécution en strict on
Commenter la réponse de Gildeplomb
Whismeril 10523 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - Modifié par Whismeril le 11/02/2017 à 12:57
0
Utile
Essaye comme ça
Dim maRessource As Object = My.Resources.ResourceManager.GetObject(I.ToString("_00"))
K = CType(maRessource, Bitmap)

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril
Gildeplomb 87 Messages postés samedi 29 décembre 2012Date d'inscription 10 août 2017 Dernière intervention - 11 févr. 2017 à 16:19
0
Utile
2
C'est génial ça marche comme sur des roulettes

est ce préférable de mettre toujours option strict sur on . Quel est
l'avantage ?

Merci beaucoup
Whismeril 10523 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 11 févr. 2017 à 17:28
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 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 11 févr. 2017 à 17:30
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 )

De plus pour faire du vrai VB Net dans les références du projet supprimer l'importation à Microsoft Visual Basic en le décochant . Ceci évite d'utiliser des instructions compatibles VB6
Voir http://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net pour ce dernier point
Commenter la réponse de Gildeplomb

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.