Tester le contenu d'une picturebox sous .net

Résolu
nexell Messages postés 2 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 juin 2011 - 16 juin 2011 à 00:25
nexell Messages postés 2 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 juin 2011 - 16 juin 2011 à 21:06
Salut...
J'aimerais savoir quel problème y a t-il à poser cette condition:
-----------------------------------------------
If picturebox1.image is picturebox2.image then
...
End if
------------------------------------------------
En fait je débute en VB et en programmation en général, je dois avouer que je ne comprends pas grand chose en POO, donc ma démarche est encore procédurale.
J'ai conçu un puzzle avec vb.net 2008 et je bute sur la condition finale qui est sensée vérifier le contenu de mes (25) picturebox et stopper le jeu dans le cas où on a le bon ordre. J'ai utilisé des conditions du style:

-If picturebox1.image is image.fromfile(directory.getcurrentdirectory &"le chemin") then
...
End if
- If picturebox1.imagelocation = image.fromfile(directory.getcurrentdirectory &"le chemin") then
...
End if
et d'autres encore mais rien... le compilateur ne signale aucune erreur de syntaxe mais n'entre même pas dans ces conditions même quand il le faut...

J'ignore où je pèche mais j'attends vos conseils et astuces. Merci d'avance.
            
                

2 réponses

nexell Messages postés 2 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 juin 2011
16 juin 2011 à 21:06
Très prompte, j'adore merci encore pour les conseils et astuces Mayzz je vais les tester sur le champ...(çà va être énorme ) et je te dirai ce qu'il en est...
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
16 juin 2011 à 14:32
Salut,

En faite VB ne comparera pas le contenu de tes images pour savoir si elle sont identiques car il faudrait pour cela, vérifier tout un ta de chose, à commencer par le format de l'image puis pixel par pixel regarder s'ils sont identiques etc...

La seule chose que VB compare, ce sont les instances. Il regarde si l'allocation mémoire correspond. Pour cela tu peux utiliser la méthode Equals.

If picturebox1.image.Equals(PicturBox2.image) then
...
End if 


Cela pourra t'aider. Cependant les images devront être de la même instance. Dans ton programme, la partie ou l'utilisateur déplace les images ne devra pas recréer d'instance mais conserver les instances existantes. La ligne ci-dessous :

PictureBox1.image.Equals(Image.FromFile("CheminImage"))


Retournera donc toujours un résultat faux, car Image.FromFile créera une instance (donc une allocation mémoire) différente de celle de PictureBox1.Image

Du coup tu ne peux utiliser Equal que dans la mesure ou :

PictureBox1.Image = Image.FromFile("CheminImage")
PictureBox2.Image = PictureBox1.Image
If PictureBox1.Image.Equals(PictureBox2.Image) Then


Donc il faut que lors ce que l'utilisateur déplace l'image dans ton puzzle tu ne recharge pas l'image depuis le fichier mais que tu pointe l'instance du modèle que l'utilisateur déplace vers le PictureBox de destination.

Après ce n'est pas spécialement la solution la plus adaptée. Tu peux aussi identifier les PictureBox avec un Tag pour savoir que quelle image il s'agit par exemple.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Rejoignez-nous