Object reference not set to an instance of an object. [Résolu]

Signaler
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009
-
mohamed1919
Messages postés
1
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 juin 2008
-
Bonjour,


Je travail sur Visual 2005. J'ai créé un contrôle personnalisé que je
peux réutiliser dans mes divers projets C#. Ce contrôle est divisé en 2
classes :

> ButtonPopUp qui permet de visualiser un bouton popUp,

> ButtonPopUpList qui gère une fenêtre popUp appelé lorsque
l'utilisateur appui sur le bouton. Elle gère en fait une ListView.


Tout les accés à ButtonPopUpList se font au travers de la classe ButtonPopUp.


C'est une variable membre de la classe ButtonPopUp qui me pose un
problème : "m_sSelectedElementName". Cette variable possède un
accesseur (avec un Get() et un Set()) qui me permet de savoir quel
élément est sélectionné dans la listView de la fenêtre popUp. Voici la
liste des variables membres et l'accesseur :


VARIABLES :
      /// <summary>

      /// Nom de l'élément sélectionné

      /// </summary>

      private string m_sSelectedElementName = "";


ACCESSEUR :
      /// <summary>

      /// Obtient le nom de l'élément sélectionné

      /// </summary>

      [

        EditorBrowsable(EditorBrowsableState.Never),

        Browsable (false),

      ]

      public string SelectedElementName

      {

        get { return m_sSelectedElementName; }

        set

        {

          // vérifie que l'élément se trouve bien dans la liste

          if (m_popUpList.ListItems.Contains(value))

          {

            // récupération du nom

            m_sSelectedElementName = value;


            // modification de l'élément sélectionné dans la fenêtre popup

            m_popUpList.ElementName = m_sSelectedElementName;


            // récupération de l'image

            m_iSelectedElementImage = m_popUpList.ElementImage;


            // changement de l'image sur le bouton

            if (m_iSelectedElementImage != null)

              buttonEditSymbol.BackgroundImage = m_iSelectedElementImage;

          }

        }

      }

Lorsque j'ajoute mon contrôle perso
ButtonPopUp dans une fenêtre d'un de mes projets via le Designer de
Visual il génère automatiquement le code dans un un fichier
"Designer.cs".

C'est normal jusque là sauf que lorsque je revient sur le Designer de cette fenêtre le message suivant apparaît :
Object reference not set to an instance of an object.

Il refuse donc de m'afficher la fenêtre.

Je retourne donc dans le "Designer.cs" pour voir
ce qui se passe et je vois que la ligne suivante apparait dans
l'initialisation du contrôle :

      this.buttonPopUpText.BackColor = System.Drawing.Color.Transparent;

      this.buttonPopUpText.Flat = System.Windows.Forms.FlatStyle.Standard;

      resources.ApplyResources(this.buttonPopUpText, "buttonPopUpText");

      this.buttonPopUpText.Name = "buttonPopUpText";

      this.buttonPopUpText.SelectedElementName = "";

      this.buttonPopUpText.ClickOnButtonEdit += new              System.EventHandler(this.buttonPopUpText_ClickOnButtonEdit);

      this.buttonPopUpText.NewselectionInPopUp += new System.EventHandler(this.buttonPopUpText_NewselectionInPopUp);


Si je supprime cette ligne pas de problème le projet démarre et la
popUp fonctionne. J'aimerais savoir pourquoi cette ligne apparait dans
le fichier "Designer.cs" ?


Comme vous pouvez le constater l'accesseur Set() effectue un certains
nombre d'opération. Est-ce celà qui pourrait poser des problème ?

Vive les Moutons !

Vive les Moutons !

5 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
45
Hi,
Essaye de rajouter
[
DesignerSerializationVisibility(
DesignerSerializationVisibility.Hidden)]
comme attribute sur ta property.

<hr />
-My Blog-
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009

Ok je vais essayer.

Sinon, en prenant un peu de recul j'ai remarqué que j'utilisait des doublons dans mes variables. En gros, la variable dont je parle dans mon premier poste et qui me permet de récupérer le nom de l'item séléctionné dans la listView est présente dans ButtonPopUp et dans ButtonPopUpList...

J'aurais dû le remarquer avant mais mieu vaut tard que jamais^^. Du coup je l'ai supprimé de ButtonPopUp.
ButtonPopUp est la seule à être instancier lorsque j'en ai besoin et elle me permet d'afficher un bouton appelant une fenêtre popUp. Au finale elle ne possède plus qu'un accesseur vers la variable de mon autre classe ButtonPopUpList  qui elle gère la fenêtre popUp et son contenu. C'est cette classe ButtonPopUpList qui va garder le nom d'item sélectionné.

Enfin bon, du coup j'ai plus de problème avec cette variable. Par contre je vais quand même essayer ta méthode. Je poste un message pour te dire si c'est la solution.

Dans tous les cas merci de ta réponse !

Vive les Moutons !
Messages postés
26
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
3 mars 2009

Ok c'est bon tout baigne !

Je rajoute une note au final^^ : J'ai raconté des bêtises sur mon poste juste au-dessus. Ca n'avait rien changé au problème. En fait c'est juste que hier soir j'étais fatigué et que j'étais trop content que cela "fonctionne"^^.

Bref, je sais pas trop ce qui m'a fait croire que tout baigné avec le nettoyage que j'avais effectué mais en tout la seule vrai méthode c'est la tienne Bidou !

Encore merci ;)

Vive les Moutons !
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
45
De rien

<hr />
-My Blog-
Messages postés
1
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
5 juin 2008

Bonjour, j'ai le meme probléme mais avec un autre fonctionnement, voila :

webBrowser1.Navigate(URL +

"/search?q=" + combo2.Text);===> sa fonctionne trés bien

WebBrowser wb =
new
WebBrowser();wb.Document.ExecCommand(

"SaveAs",
false,
"C:\test.html");===>c'est ici que le message d'erreur je le trouve 'Object reference not set to an instance of an object.'
le but est de copie le contenue du WebBrowser dans un fichier HTML .
Est-ce que vous pouvez m'aider.