Changer image pictureBox après click

- - Dernière réponse : Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 décembre 2019
- 26 avril 2019 à 19:02
Bonjour,

Je suis entrain de faire un jeu pour enfant, il s'agit d'un jeu pour apprendre à compter , une image vas s'afficher et l'enfant devra dire combien il y a d'animaux sur l'image.

J'aimerai bien savoir comment faire pour que quand l'utilisateur saisi la bonne réponse et clique sur suivant, le picturebox affiche une nouvelle image.

Voici des images pour vous montrer comment cela se présente, merci d'avance.
Afficher la suite 

3 réponses

Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 décembre 2019
322
0
Merci
Bonjour

Peux tu montrer le code qui affiche la première image?
Merci d’utiliser la coloration syntaxique, voir procédure ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je n'ai pas eu besoin de code, dans les propriété du picturebox il y à une case ou on peut directement ajouter une image. Désolé je débute
Commenter la réponse de Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 décembre 2019
322
0
Merci
Ça n'est pas une bonne option, cela veut dire que ton logiciel démarre toujours avec la même image.
Ton élève n'aura pas à apprendre à compter, mais "juste" à apprendre par coeur la réponse.
A plus forte raison si tu figes aussi la suivante et la suivante etc...
C'est le même problème avec la lecture répétée en classe, certains lisent, d'autres apprennent "la récitation".

Je te propose ceci "une base de données" (un csv peut largement suffire) qui associe une image à sa réponse et un affichage aléatoire.


C'est vrai, je vais faire des recherches sur comment mettre en oeuvre ce système et je vais essayé
Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 décembre 2019
322 -
Je te montrerai un bout de code dans la soirée
Commenter la réponse de Whismeril
Messages postés
14026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 décembre 2019
322
0
Merci
D'abord la classe, elle permet d'associer l'image et sa solution, elle teste si on peut charger l'image et si la réponse est bien un entier.
Dans la négative, Nombre vaut -1

    class Vbiz91
    {
        public Vbiz91(string Chemin, string Nbre)
        {
            try
            {
                MonImage = Image.FromFile(Chemin);
            }
            catch(Exception e)
            {
                return;
            }

            int res;
            if (int.TryParse(Nbre, out res))
                Nombre = res;
        }
        public int Nombre { get; set; } = -1;//si la conversion ne marche pas Nombre vaudra -1

        public Image MonImage { get; set; }
    }


le fichier csv
c:\temp\image 1.jpg;2
c:\temp\image 2.jpg;9
c:\temp\image 3.jpg;10
c:\temp\image 4.jpg;6



le constructeur du formulaire
        List<Vbiz91> mesImages;
        Vbiz91 encours;//permet d'afficher l'image en cours et d'accéder à sa réponse
        public Form1()
        {
            InitializeComponent();

            //chargement du fichier dans une collection temporaire
            var images = (from l in File.ReadAllLines("vibz91.csv")//l est une ligne du fichier
                          let t = l.Split(';')//t est un tableau composé des élements séparés par ;
                          select new Vbiz91(t[0], t[1])
                          );

            //on enlève les instances qui vallent -1 (pb dans l'import du fichier
            images = images.Where(x => x.Nombre != -1);//x est une variable d'itération, un peu comme un foreach x 

            //on mélange, en triant selon un critère totalement aléatoire, le Guid est un hashcode plus aléatoire que ne l'est la fonction Random
            mesImages = images.OrderBy(x => Guid.NewGuid()).ToList();

            AfficheImage();
}


La méthode AfficheImage qu'il faut appeler pour afficher la suivante
        /// <summary>
        /// prend la 1ere image de la liste mélangée, l'affiche et l'enlève de la liste
        /// </summary>
        private void AfficheImage()
        {
            if (mesImages.Count == 0)
            {
                encours = null;
                pictureBox1.Image = null;//efface le picture box
                return;
            }

            encours = mesImages[0];

            pictureBox1.Image = encours.MonImage;//on charge le picture box 

            mesImages.Remove(encours);//on elève cette instance de la liste
        }

Commenter la réponse de Whismeril