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

Windows Forms Discussion :

Problème d'instanciation d'objet lorsqu'on modifie le formulaire


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut Problème d'instanciation d'objet lorsqu'on modifie le formulaire
    J'ai une application qui est le jeu des allumettes.
    Pour afficher mes allumettes j'utilise une picture box que j'ai rajouté manuellement dans le designer.cs de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private System.Windows.Forms.PictureBox[] ImageAllumettes;
    Je ne l'ai pas crée via l'outil car je vais ensuite lui assigné les valeurs que je veux et avoir plusieurs images dans cette picturebox.
    Voilà comment ensuite je lui attribue les valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int X = 22;//position de la premiere allumette
                int Y = 28;
     
                for (int i = 0; i < 26; i++)// pour chaque allumettes
                {
                    ImageAllumettes[i] = new System.Windows.Forms.PictureBox();//on ajoute une nouvelle picturebox sur le formulaire
                    ((System.ComponentModel.ISupportInitialize)(ImageAllumettes[i])).BeginInit();//on l'initialise
                    ImageAllumettes[i].Image = global::Jeu_des_Allumettes.Properties.Resources.Allumette;//on lui met l'image de l'allumette
                    ImageAllumettes[i].Location = new System.Drawing.Point(X, Y);//on la place sur le formulaire
                    ImageAllumettes[i].Name = "ImgAllumette" + i;//on la nomme
                    ImageAllumettes[i].Size = new System.Drawing.Size(11, 80);//on lui donne la bonne taille
                    Controls.Add(ImageAllumettes[i]);//on ajoute le controle dans le formulaire
                    X = X + 20;//on prépare la position de la prochaine allumette, + 20 pixel sur l'horizontal
                }
    Le problème est que maintenant à chaque changement du design de mon formulaire que ce soit le 'bougageage' d'un bouton ou d'un label j'ai le droit à un beau :

    La référence d'objet n'est pas définie à une instance d'un objet.
    A l'endroit au moment de l'initialisation de mon allumette...
    D'où vient le problème ? Merci d’avance !

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    il ne faut pas toucher au Designer.cs. Place ton code dans le corps de la classe, parce que le contenu de Designer.cs est, comme indiqué dans ses commentaires, la chasse gardée du designer, qui y fait tout ce qu'il veut, y compris supprimer ce qu'il ne sait pas interpréter.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut
    Merci pour ta réponse.
    Le problème c'est que je n'arrive pas à déclarer mon tableau de Picturebox[] ImageAllumettes dans le corps de ma classe.
    J'ai toujours le droit à une erreur.
    Tu pourrais me dire comment déclarer un tableau de picturebox ?

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Bonjour,
    pourquoi ne pas utiliser une liste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<PictureBox> liste_image = new List<PictureBox>();
    Dans une List<> tu peux mettre ce que tu veux. C'est un tableau d'objet string int float textbox MonObjetAMoi etc...
    J'espère que la solution te convient sinon exposes un peu plus ce que tu veux faire.

    Bonne continuation.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 196
    Par défaut
    Je n'ai jamais utilisé de liste en fait c'est pour ça
    ça va impliquer le changement d'autres trucs non ? Ou est-ce que ça fonctionne comme un tableau ?
    Dans mon exemple par exemple ?

    J'ai fais comme ça mais j'ai une erreur comme quoi mon index était hors limite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     List<PictureBox> ImageAllumettes = new List<PictureBox>(26);
            Partie PartieEnCours;
     
            public Form1()
            {
                InitializeComponent();
     
     
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                int X = 22;//position de la premiere allumette
                int Y = 28;
     
                for (int i = 0; i < 26; i++)// pour chaque allumettes
                {
     
                  ImageAllumettes[i] = new System.Windows.Forms.PictureBox();//on ajoute une nouvelle picturebox sur le formulaire
                    ((System.ComponentModel.ISupportInitialize)(ImageAllumettes[i])).BeginInit();//on l'initialise
                    ImageAllumettes[i].Image = global::Jeu_des_Allumettes.Properties.Resources.Allumette;//on lui met l'image de l'allumette
                    ImageAllumettes[i].Location = new System.Drawing.Point(X, Y);//on la place sur le formulaire
                    ImageAllumettes[i].Name = "ImgAllumette" + i;//on la nomme
                    ImageAllumettes[i].Size = new System.Drawing.Size(11, 80);//on lui donne la bonne taille
                    Controls.Add(ImageAllumettes[i]);//on ajoute le controle dans le formulaire
                    X = X + 20;//on prépare la position de la prochaine allumette, + 20 pixel sur l'horizontal
                }
    PS = j'ai mis ma liste à 26 car au départ j'ai 26 allumettes.

    Avant j'avais dans mon designer.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               this.ImageAllumettes = new System.Windows.Forms.PictureBox[26];
    et ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            private System.Windows.Forms.PictureBox[] ImageAllumettes;
    Que j'ai supprimé.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    C'est un tableau dynamique tout bête. Du même genre qu'un ArrayList.
    Voila un petit code qui met œuvre les fonctions de base d'un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    List<PictureBox> liste_pictureBox = new List<PictureBox>();
                PictureBox picture_box_1 = new PictureBox();
                PictureBox picture_box_2 = new PictureBox();
     
                //ajoute des pictures box dans le tableau
                liste_pictureBox.Add(picture_box_1);
                liste_pictureBox.Add(picture_box_2);
     
                //ma picture box 1 est dans l'index 0 du tableau
                //ma picture box 2 est dans l'index 1 du tableau
                MessageBox.Show("nombre de picture box dans le tableau :" + liste_pictureBox.Count); // affiche 2
     
                //suppression de la picture box 2 dans le tableau
                liste_pictureBox.RemoveAt(1);
     
                MessageBox.Show("nombre de picture box dans le tableau :" + liste_pictureBox.Count); // affiche 1
    Est-ce vraiment une liste de picture box que tu veux ou une liste d'image à charger dans une picture box ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'instanciation d'objet
    Par 1974k dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 27/12/2014, 16h58
  2. [PHP 5.3] Problème d'instanciation d'objet
    Par lecra dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2011, 14h01
  3. [COM] Problème d'instanciation d'objet COM
    Par lpapouk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/07/2008, 15h14
  4. Réponses: 7
    Dernier message: 18/07/2006, 12h23

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