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 :

C# "NullReferenceException" Tableau à deux dimensions


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut C# "NullReferenceException" Tableau à deux dimensions
    Bonjour,

    Je suis actuellement confronté à un petit problème et je viens vers vous en espérant que vous pourriez m'aider à le résoudre !

    Je souhaite créer un "damier" de bouton dans une grid, jusque là pas de soucis, ensuite pour pouvoir identifier chaque bouton j'utilise un tableau de bouton à 2 dimensions par exemple "btnTest[x,y]" et là le débogueur me génère une exception "NullReferenceException" mais je ne sais absolument pas pourquoi

    Voilà le bout de code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    private Button[,] btnTest; //Déclaration du tableau de bouton
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {             
     
                for (int i = 0; i < 50; i++)
                {
                    // Definition de la taille des colonnes et lignes de la grilles
                    grid2.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = new GridLength(10)
                    });
                    grid2.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = new GridLength(10)
                    });
                }  
     
                //Double boucle pour peupler la grille
                for (int x = 0; x < 50; x++)
                {
                    for (int y = 0; y < 50; y++)
                    {
                        //!\\ L'exception "NullReferenceException" est lévée à partir d'ici
                        btnTest[x, y] = new Button();
                        btnTest[x, y].UseLayoutRounding = false;
                        btnTest[x, y].BorderBrush = Brushes.White;                   
                        btnTest[x, y].Background = Brushes.Green;
     
                        //On attache le boutton à sa place dans la grille
                        grid2.Children.Add(btnTest[x, y]);
                        Grid.SetRow(btnTest[x, y], x);
                        Grid.SetColumn(btnTest[x, y], y);
     
                    }
                }
            }
    J’espère avoir été assez clair, si vous avez besoin de plus précision je reste là

    Merci d'avance !

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Et où fais-tu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnTest = new Button[i,j]
    ?

    Ton tableau n'est jamais instancié... Pas d'instance = Null

    La NullReferenceException est la plus facile des erreurs à corriger... il suffit de debugger pour voir où ça plante... ou tout simplement de RELIRE son code. Bien évidement, il faut aussi un mimimum de compréhension de la POO et du C#. J'imagine qu'en mode "tête dans le guidon" tu n'as pas pris le temps de faire fonctionner ton code dans ta tête ou sur papier...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Merci de prendre le temps de répondre (avec tant de délicatesse d'ailleurs).

    Mais lorsque j'instancie mon tableau avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnTest = new Button[x, y]();
    Le "new Button[x,y]();" est souligné et me dis "Erreur : Nom de Méthode attendu", je tourne en rond à cause de ça justement.

    J'essaie de relever ma tête du guidon, mais j'ai encore besoin des petites roues arrières

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Daelor Voir le message
    Le "new Button[x,y]();" est souligné et me dis "Erreur : Nom de Méthode attendu", je tourne en rond à cause de ça justement.
    La syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnTest = new Button[x, y];

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    comme quoi, même en postant un réponse sur le forum, il faut se relire...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Salut Bluedeep,

    J'ai aussi essayé cette syntaxe mais il me génère toujours cette "NullReferenceExeption"

    Mon bout de code fonctionne correctement en WinForm mais pas en WPF peut être que le soucis viens de là ? (je ne cerne pas encore toutes leurs différences pour comprendre :/)

  7. #7
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Je doute que ça vienne de là. Où rajoutes-tu l'instruction que l'on ta donnée ?
    Tu peux poster ton code mis à jour stp. L'erreur est facile à corriger, si on a le code

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Voilà mon code actuellement

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
           private Button[,] btnTest; //Déclaration du tableau de bouton
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {             
                for (int i = 0; i < 50; i++)
                {
                    // Definition de la taille des colonnes et lignes de la grilles
                    grid2.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = new GridLength(10)
                    });
                    grid2.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = new GridLength(10)
                    });
                }  
     
                //Double boucle pour peupler la grille 
                for (int x = 0; x < 50; x++)
                {
                    for (int y = 0; y < 50; y++)
                    {
     
                        btnTest = new Button[x+1,y+1];//+1 pour eviter le "IndexOutOfRangeException"
                        btnTest[x, y].UseLayoutRounding = false; //!\\ L'exception "NullReferenceException" est lévée à partir d'ici 
                        btnTest[x, y].BorderBrush = Brushes.White;                   
                        btnTest[x, y].Background = Brushes.Green;
     
                        //On attache le boutton à sa place dans la grille
                        grid2.Children.Add(btnTest[x, y]);
                        Grid.SetRow(btnTest[x, y], x);
                        Grid.SetColumn(btnTest[x, y], y);
     
                    }
                }
            }

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ce code n'a pas de sens : tu réinstancies le tableau à chaque affectation !!

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    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
    28
     
             private Button[,] btnTest; //Déclaration du tableau de bouton
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {             
                for (int i = 0; i < 50; i++)
                {
                    // Definition de la taille des colonnes et lignes de la grilles
                    grid2.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = new GridLength(10)
                    });
                    grid2.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = new GridLength(10)
                    });
                }  
               //Instancer ton tableau avant la boucle
                btnTest = new Button[50,50];
                //Double boucle pour peupler la grille 
                for (int x = 0; x < 50; x++)
                {
                    for (int y = 0; y < 50; y++)
                    {
     
                    }
                }
            }

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Je viens de comprendre et ça fonctionne c’était tout con en effet :/

    En fait je sauté l'étape de la déclaration de la taille du 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
    17
    18
    19
    20
    21
    22
     
    btnTest = new Button[50, 50];
     
                //Double boucle pour peupler la grille 
                for ( int x = 0; x < 50; x++)
                {
                    for (int y = 0; y < 50; y++)
                    {
     
                        btnTest[x, y] = new Button();
                        btnTest[x, y].UseLayoutRounding = false;
                        btnTest[x, y].BorderBrush = Brushes.White;                   
                        btnTest[x, y].Background = Brushes.Green;
     
                        //On attache le boutton à sa place dans la grille
                        grid2.Children.Add(btnTest[x, y]);
                        Grid.SetRow(btnTest[x, y], x);
                        Grid.SetColumn(btnTest[x, y], y);
     
                    }
     
                }
    Merci, et désolé j'aurais du mieux réfléchir il est vrai

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  2. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  3. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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