Option strict on / off [Résolu]

Messages postés
90
Date d'inscription
samedi 29 décembre 2012
Dernière intervention
25 novembre 2018
- - Dernière réponse : vb95
Messages postés
1727
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2018
- 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 

Votre réponse

4 réponses

Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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
Messages postés
90
Date d'inscription
samedi 29 décembre 2012
Dernière intervention
25 novembre 2018
0
Merci
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
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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
Messages postés
90
Date d'inscription
samedi 29 décembre 2012
Dernière intervention
25 novembre 2018
0
Merci
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
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
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és
1727
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
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.