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 :

Variable modulable [Titre temporaire]


Sujet :

C#

  1. #1
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut Substitut à DirectCast
    Bonjour,

    Est il possible de créer un fonction de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void modif_label(string nom_Label, string contenu)
    {
    Lbl_[nom_Label].Text=contenu;
    }
    J'ai actuellement 61 label sur un Form et je me voix mal les faire un par un. ils sont tous conçues sur le même modèle de nom d'objet
    Lbl_0001,Lbl_0002,Lbl_0003,...

    Si c'est possible.

    Merci de m'indiquer la bonne façon de procéder, car je doute que mon "Lbl_[nom_Label]" soit bien "C Sharpien".

    Et surtout comment nomme t'on cette méthode ou ce type de variable afin de changer le titre de la discussion en fonction

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    // code dans le codebehind de la page ASPX
    // nomlabel est le nom complet du label Lbl_xxxx
     
    void modif_label(string nomlabel, string contenu) {
       Control label = Page.FindControl(nomlabel);
       if(label != null && label is Label) {
          ((Label)label).Text = contenu;
       }
    }
    ASP.NET is not PHP.

  3. #3
    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
    Ou un Array de Label créés dynamiquement.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ou par reflection
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Merci pour l'asp mais ce n'est pas pour du WEB.

    Les deux autres réponses me font dire
    Ouille !

    Je ne sais pas de quoi vous parler.

    Un array de label ce fait de quel manière ?

    Je créer mes label sur mon Form et ensuite j'enregistre leur nom dans un tableau (ou une list <t>) ? Ai je bon ?

    Je ne suis plus sûr de ma fonction du coup....

  6. #6
    Membre actif Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
           public void labelUpdate(string s_newText){
     
                foreach (Control currentLabel in Controls)
                {
                    if (currentLabel is Label)
                    {
                        currentLabel.Text = s_newText;
                    }
                }
            }
    Avec cette fonction tu parcours tous les Label de ta page est tu peux changer leurs valeurs

    @+

  7. #7
    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
    Création dynamique de Labels:
    Une procedure générale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    internal static Label AddLabel(int X, int Y, String ControlText, 
         Control.ControlCollection ParentControl)
        {
          Label NewControl = new Label();
          NewControl.Location = new System.Drawing.Point(X, Y);
          NewControl.Text = ControlText;
          NewControl.Size = new Size(10, 99);
          ParentControl.Add(NewControl);
          NewControl.AutoSize = true;
          return NewControl;
        }
    Utilisée ainsi (par exemple,pour mettre 30 labels dans un Panel ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Label[] MyLabels=new Label[30] ;
    for(int i=0;i<30;i++) 
         MyLabels[i]=AddLabel(10, 5+25*i,"Texte "+i.ToString(),MyPanel.Controls) ;

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    D'où l'interêt de poster dans le bon forum -> Windows Forms vu que dans WinForms ou WebForms, il y a des contrôles Label ...

  9. #9
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Merci de toutes vos réponses
    Mais j'ai 2-3 questions

    clodo13 -> Ton code me fais changer la valeur de tout mes Labels, non ?

    Graffito -> Je ne pense pas adopter la création dynamique. Car mes labels doivent être présent dès le lancement de mon forms et son initialisé suite a des actions dans le WinForms . Mais je garde le code sous le coude on ne sait jamais.

    Kaidan -> C'est noté pour la prochaine fois.


    Je pensais à utiliser les Dictionnary du style

    IDictionary<string, object> toto = new IDictionary<string, object>();
    toto.Add(01, label01);
    toto.Add(02, label02);
    toto.Add...
    toto.Add(61, label61);

    Et modifier mes labels avec

    private void modif_Label(string Id_Label, string Etat)
    {
    if (toto.ContainsKey(Id_Label))
    {
    toto[Id_Label].Text = Etat;
    }
    }

    Mais n'étant pas sur mon Poste je n'ai pas pu tester

    Le plus long a génrer est le Dictionnary. Si quelqu'un connais une autre méthode je suis preneur.

  10. #10
    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
    Salut,

    quand tu crées un contrôle dans le designer de form, le code généré automatiquement dans TaForm.Designer.cs affecte la propriété "Name" de ce contrôle au nom que tu lui as donné. Exemple d'un projet à moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    this.labelReference.AutoSize = true;
    this.labelReference.Location = new System.Drawing.Point(3, 0);
    this.labelReference.Name = "labelReference"; // ici !!
    this.labelReference.Size = new System.Drawing.Size(57, 13);
    this.labelReference.TabIndex = 6;
    this.labelReference.Text = "Reference";
    Tu peux donc faire (et c'est pas limité aux labels, d'ailleurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void ChangeText(string controlName, string newText)
    {
        foreach(Control c in Controls)
            if (c.Name == nom_Control)
                c.Text = newText;
    }
    Par contre, si tu ne crées pas le contrôle via le designer mais à la main, sa propriété "Name" ne sera pas affectée automatiquement.

    Par contre, je trouve pas ça super propre. Pourquoi crées-tu une fonction qui mélange des chaînes de caractères affichées à l'utilisateur (le paramètre newText de la fn ci-dessus) et une chaîne "interne", qui est propre à ton code ? C'est risqué de faire du code qui dépend du nom des variables...

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    comme je disais, par réflection ca prend une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void modif_label(string nom_Label, string contenu)
    {
    directcast(this.gettype.getfield(nom_Label,system.Reflection.BindingFlags.instance or system.Reflection.BindingFlags.public or system.Reflection.BindingFlags.nonpublic),label).Text=contenu;
    }
    et une ligne en plus si on veut tester si le label existe bien et pas se prendre une erreur


    EDIT :
    je viens de tomber sur un truc effrayant (dans le sens ou c'est simple)
    et j'avais jamais remarqué qu'on pouvait faire ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.controls(nom_du_control)
    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directcast(this.controls(nom_du_control),label).Text=contenu;
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Merci Guulh c'est un début de piste intérréssant. Le seul problème est de boucler tout les controls de mon Forms


    sperot51 : directcast n'est pas une fonction eclusivement VB ?

    Merci je continu à chercher

  13. #13
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Bon je cherche pas plus longtemps J'ai trouvé un truc très très simple.

    Merci à sperot51 pour m'avoir mis sur la voie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Controls[string_Nom_Label].Text = resultat;
    Désolé de vous avoir fais perdre votre temps.

  14. #14
    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
    Citation Envoyé par llaffont Voir le message
    sperot51 : directcast n'est pas une fonction eclusivement VB ?
    Jamais fait de VB, mais à vue de nez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directcast(this.controls(nom_du_control),label).Text=contenu;
    doit être équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Label)(this.Controls[nom].Text) = contenu;
    Le truc important, quand même, c'est que tu ne t'intéresses qu'à la propriété "Text" de ton label, qui est une propriété de l'ancêtre de Label qu'est Control. Ce que tu cherches à faire n'est pas spécifique aux labels, autant faire une fonction plus générale.

    L'héritage, c'est terrible.

  15. #15
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    désolé moi je fais du vb (j'ai dejà pensé à mettre this à la place de me )
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Membre actif Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Citation Envoyé par llaffont Voir le message
    Merci de toutes vos réponses
    Mais j'ai 2-3 questions

    clodo13 -> Ton code me fais changer la valeur de tout mes Labels, non ?

    Graffito -> Je ne pense pas adopter la création dynamique. Car mes labels doivent être présent dès le lancement de mon forms et son initialisé suite a des actions dans le WinForms . Mais je garde le code sous le coude on ne sait jamais.

    Kaidan -> C'est noté pour la prochaine fois.


    Je pensais à utiliser les Dictionnary du style

    IDictionary<string, object> toto = new IDictionary<string, object>();
    toto.Add(01, label01);
    toto.Add(02, label02);
    toto.Add...
    toto.Add(61, label61);

    Et modifier mes labels avec

    private void modif_Label(string Id_Label, string Etat)
    {
    if (toto.ContainsKey(Id_Label))
    {
    toto[Id_Label].Text = Etat;
    }
    }

    Mais n'étant pas sur mon Poste je n'ai pas pu tester

    Le plus long a génrer est le Dictionnary. Si quelqu'un connais une autre méthode je suis preneur.
    Tous les Label "OUI"

  17. #17
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Citation Envoyé par clodo13 Voir le message
    Tous les Label "OUI"
    Qu'as tu voulu dire ?

  18. #18
    Membre actif Avatar de clodo13
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Je voulais dire que si tu veux parcourir tous les label de ton"form " tu peux utilisrer la fonction que je t'ai donné dans le 1er message

    @+

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

Discussions similaires

  1. variable dans titre graphique
    Par miopie dans le forum Excel
    Réponses: 1
    Dernier message: 17/10/2010, 19h36
  2. marcro variable et titre
    Par yaferoz dans le forum Macro
    Réponses: 1
    Dernier message: 11/10/2009, 10h39
  3. retourne l'adresse d'une variable locale ou temporaire
    Par jojo000 dans le forum Débuter
    Réponses: 10
    Dernier message: 12/06/2009, 12h11
  4. Récupération de variable dans titre état ?
    Par leeloo35 dans le forum IHM
    Réponses: 6
    Dernier message: 18/02/2008, 13h29
  5. Variables d'environnement temporaire ?
    Par TheDrev dans le forum Windows XP
    Réponses: 2
    Dernier message: 24/08/2007, 10h08

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