IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Initialiser plusieurs picturebox dand une boucle


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut Initialiser plusieurs picturebox dand une boucle
    Bonjour à tous,
    je viens ici car j'ai un problème, j'apprends le C# est pour cela j'ai voulu me créer un petit programme pour m'entrainer.
    Dans ce programme j'ai 55 pictureBox dont je doit changer l'image.
    Pour l'instant j'ai 55 lignes comme celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox1.Load(@".\image\1.png");
    ce qui est tout sauf une bonne façon de faire pour moi...
    je pense qu'avec une boucle on peut régler le problème mais je n'arrive pas a la faire fonctionner cette maudite boucle En gros je voudrais faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i=0; i>55; i++)
                {
                    pictureBox+i.Load(@".\image\i.png");
                 }
    j'en renommé mes images pour que pictureBox1 est a afficher 1.png et ainsi de suite

    J'ai également un autre problème toujours avec des pictureBox :
    je voudrais que lorsque l'on click sur l'image ça ouvre un nouveau form et de passer en paramètre le numéro de mon pictureBox.
    Le passage de paramètre j'y arrive sans soucis c'est de récupérer le numéro du PictureBox qui me pose un problème.Pour l'instant je l'ai codé "en dur" et je trouve que c'est une façon immonde de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
            {
                //on passe le numéro de l'image en paramètre et on ouvre le form
                int i = 1;
                Form form1 = new jeux(i);
                form1.Show();
    je me vois mal faire 55 copy/paste dans mon code...

    Merci d'avance pour l'aide que vous pourrez m'apporter !

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <List>PictureBox pictureBoxes = new <List>PictureBox () ;
    Control parentControl = form1 // ou panel1 ou ...
    for (int i=0;i<=55;i++) 
      pictureBoxes.Add(parentControl["pictureBox"+i.ToString()] ;
    for (int i=0; i>55; i++) pictureBoxes[i].Load(@".\image\i.png");
    Pour les events, fais simplement pointer toutes les pictureBox sur le même event :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
    {
    //on passe le numéro de l'image en paramètre et on ouvre le form
    int i = int.Parse((Control)sender).Name.Replace("pictureBox","") ; 
    Form form1 = new jeux(i);
    form1.Show();
    }

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Mais tu va aussi devoir gerer la position de tes PictureBox dans la form

    Le picturebox est lui meme asser gourmand en ressource

    A mon avis une maniere beaucoup plus "propre" et rationelle de gerer cela
    est de definir UN SEUL picturebox et une liste de rectangle que tu utilisera pour faire un Draw des tes images sur ce picturebox

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    Hello, tout d'abord merci pour la réponse ultra rapide je suis bluffé !

    pour les events les pictureBox pointer déjà tous vers le même donc j'ai tester ta méthode mais visual studio ne l'aime pas il me sort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Argument 1: impossible de convertir de 'System.Windows.Forms.Control' en 'string'	
    La méthode surchargée correspondant le mieux à 'int.Parse(string)' possède des arguments non valides
    en soulignant int.Parse((Control)sender) je comprends pourquoi y'a une erreur (on lui mets du "code" alors qu"il attend un string non ?) du coup j'ai essayer de le modifier en insérant une variable intermédiaire mais ça marche toujours pas ..

    quand a ton autre code je suis un peu boulet mais je vois pas ou l’insérer... dans le fichier form1.Designer.cs ? Si oui dans InitializeComponent()? ou bien je me plante complètement ?

    j'vais continuer a chercher merci !


    EDIT : je n'avais pas vu ton message olibara sorry ! c'est vrai que mon programme est long a charger les picturesbox (a tel point que je debug avec seulement 10img ) l'idée d'utiliser un seul pictureBox est pas bête et ça me fera apprendre aussi a dessiner des rectangles donc je vais surement modifier mon code une fois que j'arriverais a mes fins

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    quand a ton autre code je suis un peu boulet mais je vois pas ou l’insérer
    Dans form1.cs, juste après InitializeComponents().

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    en soulignant int.Parse((Control)sender) je comprends pourquoi y'a une erreur (on lui mets du "code" alors qu"il attend un string non ?) du coup j'ai essayer de le modifier en insérant une variable intermédiaire mais ça marche toujours pas ..
    Tu naurais pas oublié la propriété "Name" ou fait une rerreur sur le parenthésage ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    Si je le mets juste après le InitializeComponents(). il me sort 17 erreurs j'en ai corrigé deux mais les 15 autres j'ai un peu plus de mal...

    par contre j'ai regardé sur un autre post et il initialiser les listes différemment, et si je suis leur exemple en le "mixant" avec le tien je n'obtiens plus que 2 erreurs .
    voila le code "mixé" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                List<PictureBox> pictureBoxes = new List <PictureBox> () ;
                Control parentControl = Fenetre_principal;
                for (int i=0;i<=55;i++) 
                pictureBoxes.Add(parentControl["pictureBox"+i.ToString()]) ;
                for (int i=0; i>55; i++) pictureBoxes[i].Load(@".\image\i.png");
    et les deux erreurs restantes sont :
    Erreur 2 'Lanceur_de_jeux.Fenetre_principal' est un 'type' mais est utilisé comme un 'variable'
    Erreur 3 Impossible d'appliquer l'indexation à l'aide de [] à une expression de type 'System.Windows.Forms.Control'
    ce code me semble plus prometteur mais vu mes talents actuels en C# c'est peut etre mauvais signe

    Pour le parseur je me suis dit que j'avais peut etre mal recopié donc j'ai fait un copy/paste j'ai vérifier les parenthèses et toujours ce même problème...

    En tout cas merci de l'aide apporté !

Discussions similaires

  1. Récupérer les coordonnées de plusieurs DIV dans une boucle PHP
    Par renaud26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/11/2009, 10h23
  2. [PHP 5.2] Implementer plusieurs fichiers dans une boucle
    Par Mugette dans le forum Langage
    Réponses: 5
    Dernier message: 17/08/2009, 18h44
  3. initialisation des variable avec une boucle
    Par grospatapouf dans le forum Langage
    Réponses: 10
    Dernier message: 10/01/2009, 12h17
  4. declarer plusieurs JcheckBox dans une boucle
    Par 01211983 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 21/02/2008, 01h47
  5. initialiser les vertex dans une boucle for
    Par StrikerFred dans le forum DirectX
    Réponses: 10
    Dernier message: 26/09/2006, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo