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 :

NullReferenceException sur un label ?


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut NullReferenceException sur un label ?
    Hello,

    J'ai le l'apparition d'un message me signalant une NullReferenceException ( NullReferenceException) pour l'affectation du texte à un label de ma Form avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))
    alors que j'en ai pas pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblG7Valeur_0.Text = CStr(frmMain.MotsWModbus(i + 27))
    Je ne comprends pas le message d'erreur, car mon label existe bien !!!

    L'intérêt pour moi de la première ligne de code est de pouvoir faire des affectations à plusieurs labels en incrémentant le numéro (ici 0 ) dans la chaine de caractères.

    Quelqu'un a t'il une explication et solution ?

    Merci d'avance

    Ghislain

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))
    Est-ce que ton controle lblG7Valeur_0 est directement sur ta forme, ou est-il dans un tableau/panel/aut'chose ?

    Parce que si c'est le cas, et si je me rappelle bien (plus de winforms depuis un an), tu dois dans ce cas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MonPanel.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Mon contrôle (un label) est bien sur ma forme.

    Je ne vois pas ce qui peut être différent entre mes deux codes ????

    Merci de ton aide

    Ghislain

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Essaie en utilisant Me.Controls.Find("lblG7Valeur_0")
    Et teste si le control n'est pas null avant d'accéder à la propriété Text, ça évitera que ça plante lamentablement.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Désolé SaumonAgile mais ta proposition ne passe pas

    D'autre part mon besoin n'est pas d'identifier la présence du contrôle.
    Celui-ci existe sur la forme et ne pose pas de problème si j'y accède en direct.

    Mon pb est que j'ai plusieurs Contrôles que je veux affecter par le biais d'une boucle FOR/NEXT et la solution d'y accéder par leur nom ne marche pas

    Me suis-je trompé sur la fonction à utiliser pour modifier les propriétés d'un contrôle en le désignant par son nom ?

  6. #6
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    a mon avis le probleme est dans la boucle qui incrémente ce compteur, autrement dit, il ya peut etre une insertion des espaces lors de la concaténation du nom constant des label et le numero d'index qui se concatène avec !
    est ce que tu utilise la fonction str() pour convertir le compteur en chaine de caracteres ? car cette fonction insere des espace avant et apres le nombre

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Bonjour Subzero

    Le pb ne semble pas venir de la boucle, puisque comme tu peux le voir dans mon premier post je ne l'utilise pas. Je fais directement un appel sur le nom du contrôle.

  8. #8
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))
    une petite question :
    dans ce code, est ce que l'objet Me est le meme objet frmMain ?
    et c'est quoi l'ojet MotsWModbus ?

    je pose ces question car si tu remplace ton code par un code de teste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("lblG7Valeur_0").Text = "test"
    ca marche bien !!!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Aie
    Lorsque je copie ton code, moi ça ne marche pas.

    message d'erreur = La référence d'objet n'est pas définie à une instance d'un objet.

    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblG7Valeur_0.Text = "test"
    fonctionne

  10. #10
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    essaye de copier mon code dans un nouveau projet contenant un label du meme nom, et teste. C'est ce que j'ai fait pour tester et ca a marché, et ben ca doit marcher avec toi aussi !

  11. #11
    Membre éprouvé Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Citation Envoyé par Barghis Voir le message
    Aie
    Lorsque je copie ton code, moi ça ne marche pas.

    message d'erreur = La référence d'objet n'est pas définie à une instance d'un objet.

    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblG7Valeur_0.Text = "test"
    fonctionne
    Juste une question :
    lblG7Valeur_0 c'est le nom de la variable.

    Mais est ce que la propriété "Name" de cette variable vaut aussi "lblG7Valeur_0" ?

  12. #12
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    Citation Envoyé par Nikoui Voir le message
    Juste une question :
    lblG7Valeur_0 c'est le nom de la variable.

    Mais est ce que la propriété "Name" de cette variable vaut aussi "lblG7Valeur_0" ?
    biensur que Name du label est "lblG7Valeur_0" puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lblG7Valeur_0.Text="test"
    marche bien !

  13. #13
    Membre éprouvé Avatar de Nikoui
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bon, je recommence avec un exemple :

    Button bt1 = new Button();
    bt1.Name = "bt2";

    bt1.Text = "toto"; // Marche

    bt2.Text = "toto"; // Marche pas

    (form1.Controls["bt1"]).Text = "toto"; // Marche pas
    (form1.Controls["bt2"]).Text = "toto"; // Marche

    Mon bouton "bt1" ayant pour valeur "bt2" dans sa propriété "Name".

    Edit : Donc je repose la question : est ce que la propriété "Name" de cette variable vaut aussi "lblG7Valeur_0" ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    J'avance !!!

    Si ton code est écris dans ma form principale = pas de pb
    Si elle est écrite dans une fenêtre fille = pb

    Je pense que cela doit venir du Me qui ne réfère pas à la bonne instance.

    Sais tu comment savoir sur quoi pointe Me ?

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Réponse à Nikoui


    la propriété "Name" de ce cntrol vaut bien "lblG7Valeur_0"

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Lors de l'écriture du code je viens de m'apercevoir que de laisser le cursor sur Me m'indique sur quoi il pointe et le résultat est correct.

    Comment puis je faire pour l'afficher en cours de prog afin de m'assurer qu'il n'y a pas eu de changement ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Par défaut
    Hourra !!!

    Enfin... je vais être plus humble même repentant car la solution m'avait été donnée par pvialatte (que je remercie au passage) Mes excuses à tous pour mon inattention mais mon control était dans un GroupBox et il me fallait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.GroupBox1.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("lblG7Valeur_0").Text = CStr(frmMain.MotsWModbus(i + 27))
    Merci à tous !

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

Discussions similaires

  1. petite question sur les "label"
    Par newixz dans le forum Delphi
    Réponses: 5
    Dernier message: 09/09/2006, 13h04
  2. Réponses: 2
    Dernier message: 07/08/2006, 22h21
  3. [C# 2.0] Pb sur un Label ! :)
    Par hobotalker dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/05/2006, 11h10
  4. Index sur un label
    Par matech dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/03/2006, 19h50
  5. [Debutant]Transparence sur un Label ou GroupBox
    Par ghan77 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/12/2005, 17h53

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