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 :

Adresser un Label à partir d'une chaine string


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut Adresser un Label à partir d'une chaine string
    Bonjour,

    J'ai beau chercher, je ne trouve pas la solution à mon problème. Je me permet donc de lancer un appel à l'aide

    J'ai une application en VB.NET (framework 2.0 VS2005) pour laquelle j'ai créé des fichiers XML pour pouvoir facilement changer de langue. Donc sur ma form principale j'ai des label dont je connais le nom (ex : lblValider) et dans mon fichier XML j'ai un noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <lblValider>Valider</lblValider>
    Dans mon code VB.NET je récupère le nom du nœud ainsi que son contenu dans 2 variables chaine de type STRING. J'ai donc une variable NomLabel qui contient la chaine lblValider et une variable LabelTexte qui contient la chaine Valider

    J'aimerais pouvoir dire à l'application que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomLabel.text = LabelTexte
    Ce qui correspondrait dans mon cas à l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lblValider.text = "Valider"
    Le problème c'est que NomLabel n'est pas un label mais une chaine et du coup VB ne peut pas traiter ce code car un String n'a pas de propriété Text.

    Donc comment est-ce que je peux passer le contenu de la chaine NomLabel en nom de label afin de modifier le contenu de celui-ci avec la variable LabelTexte ?

    Merci d'avance.
    Cordialement.
    Manu

  2. #2
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Pour information voici le code que j'utilise :
    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
     
    ' Variables de traitement des chaines XML et d'interface
    Dim XmlDoc As XmlDocument = New XmlDocument()
    Dim element As XmlNodeList
    Dim noeud, noeudEnf As XmlNode
    Dim Test As String
     
    element = XmlDoc.DocumentElement.GetElementsByTagName("LABELS")
         For Each noeud In element
             For Each noeudEnf In noeud.ChildNodes
                Test = noeudEnf.LocalName
                If Microsoft.VisualBasic.Right(noeudEnf.LocalName, 7) = "ToolTip" Then
                     ToolTip1.SetToolTip(Me.Controls(Test), noeudEnf.InnerText)
                 Else
                     Me.Controls(Test).Text = noeudEnf.InnerText
                 End If
             Next
         Next
    Avec cette méthode j'ai dans la variable TEST le nom de mon label, mais cela ne fonctionne pas.

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Code vb : 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
     
    ' J'avais l'impression que cette fonction existait déjà, mais je trouve plus ...
    Private Function FindControl(ByVal name As String, ByVal container As Control) As Control
            Dim temp As Control = Nothing
     
     
            For Each c As Control In container.Controls
                If c Is Nothing Then
                    Continue For
                ElseIf c.Name.Equals(name) Then
                    Return c
                Else
                    temp = FindControl(name, c)
                    If temp IsNot Nothing Then
                        Return temp
                    End If
                End If
            Next
     
            Return Nothing
     
        End Function
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            CType(FindControl("Label3", Me), Label).Text = "Texte"
    End Sub

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Merci,
    J'ai résolu le problème différemment, mais avec des tests sur les controls aussi. Je vais faire un coller/copier de mon code pour le donner ici.

    Amicalement.
    Manu

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Une routine pour trouver les labels de la form.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Sub trouver_label() ' Pour trouver tous les labels de la Form
     
            For Each objet As Object In Me.Controls
                If objet.GetType.Name = "Label" Then
                    LabelsInterface.Add(objet)
                End If
            Next
    End Sub
    Une routine pour modifier le texte d'un label référencé par la routine précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Sub Label_Text(ByVal Label_Name As String, ByVal Text As String) ' Modifier la propriété Text du Label
     
            For i As Integer = 0 To LabelsInterface.Count - 1
                If LabelsInterface(i).Name = Label_Name Then
                    LabelsInterface(i).Text = Text
                End If
            Next
     
        End Sub
    Puis dans le code principal lorsque c'est nécessaire un appelle à la routine de modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            ' Traiter les noeuds TABLES
            element = XmlDoc.DocumentElement.GetElementsByTagName("TABLES")
            For Each noeud In element
                For Each noeudEnf In noeud.ChildNodes
                    If Microsoft.VisualBasic.Right(noeudEnf.LocalName, 7) = "ToolTip" Then
                        Table_Tooltip(noeudEnf.LocalName, noeudEnf.InnerText)
                    Else
                        Table_Text(noeudEnf.LocalName, noeudEnf.InnerText)
                    End If
                Next
            Next
    Et comme on peut le voir j'ai une fonction pour les tooltips sur les labels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Sub Label_Tooltip(ByVal Label_Name As String, ByVal Text As String) ' Modifier le tooltip d'une table
     
            Dim Longueur_Nom As Integer
            Longueur_Nom = Microsoft.VisualBasic.Len(Label_Name)
            Label_Name = Microsoft.VisualBasic.Left(Label_Name, Longueur_Nom - 7)
            For i As Integer = 0 To LabelsInterface.Count - 1
                If LabelsInterface(i).Name = Label_Name Then
                    ToolTip1.SetToolTip(LabelsInterface(i), Text)
                End If
            Next
     
        End Sub
    Et ne pas oublier lors de la déclaration de la Form de déclarer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Dim LabelsInterface As New System.Collections.Generic.List(Of Label)() ' Collection de labels
    Et mon fichier XML ressemble à ça :

    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
     
      <LABELS>
        <lblPannes>Emplacement des fichiers texte pannes</lblPannes>
        <lblPannesToolTip>Permet de sélectionner le répertoire par défaut des fichiers textes de description des pannes</lblPannesToolTip>
        <lblPowerdyn>Emplacement des fichiers Powerdyn</lblPowerdyn>
        <lblPowerdynToolTip>Permet de sélectionner le répertoire par défaut des fichiers au format PowerDyn</lblPowerdynToolTip>
        <lblWinLogView>Emplacement des fichiers WinLogView</lblWinLogView>
        <lblWinLogViewToolTip>Permet de sélectionner le répertoire par défaut des fichiers au format WinLogView</lblWinLogViewToolTip>
        <lblLangue>Langue</lblLangue>
        <lblLangueToolTip>Choix de la langue de l'interface.</lblLangueToolTip>
        <lblFreqR>Temps de rafraichissement des données à l'écran</lblFreqR>
        <lblFreqRToolTip>Réglage de l'interval de temps de l'affichage entre chaque données à l'écran.</lblFreqRToolTip>
        <lblTypeCalculateur>Type de calculateur</lblTypeCalculateur>
        <lblTypeCalculateurToolTip>Choissisez le calculateur auquel vous allez vous connecter</lblTypeCalculateurToolTip>
      </LABELS>
    Voila
    Si cela peut-être utile.
    Cordialement
    Manu

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

Discussions similaires

  1. Extraction d'une adresse email à partir d'une chaine - Java
    Par Forkeep dans le forum Général Java
    Réponses: 8
    Dernier message: 22/04/2010, 14h29
  2. Réponses: 9
    Dernier message: 15/01/2006, 20h22
  3. Réponses: 7
    Dernier message: 15/11/2005, 10h14
  4. Réponses: 2
    Dernier message: 13/10/2005, 17h46
  5. [Struts]Ecrire un html:link à partir d'une chaine
    Par cowa dans le forum Struts 1
    Réponses: 5
    Dernier message: 12/05/2004, 17h10

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