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 Phone .NET Discussion :

Modifier une textbox dont son x:Name dépend d'une variable


Sujet :

Windows Phone .NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Modifier une textbox dont son x:Name dépend d'une variable
    Bonjour à tous

    J'ai un soucis que je n'arrive pas à résoudre, j'ai sur ma page de mon application windows phone, plusieurs textbox qui sont nommées de cette manière : "categorie1", "categorie2", "categorie3", etc etc et sont dans un panel nommé "TransactionPanel".

    A un moment, je souhaite modifier toutes ces textbox depuis du c#, et j'aurai voulu pouvoir faire un simple boucle pour éditer toutes ces textbox, mais j'aimerai pouvoir affecter une variable dont le nom en dépend d'une autre pour ainsi indexer un compteur i que j'ajouterai à "categorie" pour passer sur mes textbox en question.

    En gros faire quelque chose comme ca :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i = 0;
     
    while (i < n)
    {
    TransactionPanel.Children["categorie"+i.ToString].Text = "modifications à apporter";
    i++;
    }

    Sauf que j'arrive pas du tout à utiliser .Children qui réclame un int ??

    Ya til possibilité de sélectionner un item via son x:Name (en string) afin de pouvoir y modifier son .Text (avec .Children ou n'importe quel autre méthode) ?

    Merci infiniment pour votre aide !

  2. #2
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Hello,

    Le mieux serait de travailler avec le type de chaque élément Children de ton Panel ...

    Ainsi si c'est une TextBox tu peux faire ce que tu souhaites dessus ...

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Merci pour ta réponse !

    Tu veux dire parcourir toutes les textbox d'un panel sans savoir exactement de laquelle il sagit ? Hum je ne peux pas car elles auront toutes une valeur différente

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Ca devrait aller mieux comme ça.
    Explication :
    Children est un tableau et donc s'adresse avec un entier (i)
    On caste le l'objet obtenu par Children en TextBlock pour acceder à sa propriété Text.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int i = 0;
     
    while (i < TransactionPanel.Children.Count)
    {
    ((TextBlock)TransactionPanel.Children[i]).Text = "modifications à apporter";
    i++;
    }

  5. #5
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Non,

    ce que je voulais dire c'est faire comme dit ci-dessus par S. Blanchard mais en faisant une analyse du type de l'objet genre:

    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
    int i = 0;
     
    while (i < TransactionPanel.Children.Count)
    {
      if(TransactionPanel.Children[i] As TextBox)
      {
        TextBox CurrentTextBox = ((TextBlock)TransactionPanel.Children[i]);
        if(CurrentTextBox.Name == "CelleQueJeVeux")
        {
          CurrentTextBox.Text = "Nouveau contenu";
          Break;
        }
      }
      i++;
    }
    car si demain tu décides de mettre un autre type de composant dans ton panel le Cast directe sans test va te générer une exception ...

    Voilà

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Si l'on part sur la meilleur chose à faire dans ce cas je propose l'utilisation d'un ItemsControl:


    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ItemsControl x:Name="Liste">
      <ItemsControl.ItemTemplate>
          <DataTemplate>
                <TextBlock Text="{Binding}">
         </DataTemplate>
      </ItemsControl.ItemTemplate>
    </ItemsControl>

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    this.Liste.ItemsSource = new ObservableCollection<string>(){
    "Test1",
    "Test2"
    }

    Avec une classe heritée de INotifyPropertyChanged à la place de string on peut aller encore plus loin dans la prise en compte de la modification.

  7. #7
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Oui c'est clair ...

    Ou mettre en place une pattern MVVM.

    Voilà tu as de quoi résoudre ton problème maintenant ...

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Oui ! Merci beaucoup pour vos réponses !

    C'est exactement ce qu'il me fallait !


    Simplement par pur curiosité désormais, il y a une ligne dans ton code dont je ne comprend pas bien l'utilité (je l'ai mise en gras) :

    Citation Envoyé par DotNET74 Voir le message
    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
    int i = 0;
     
    while (i < TransactionPanel.Children.Count)
    {
      if(TransactionPanel.Children[i] As TextBox)
      {
        TextBox CurrentTextBox = ((TextBlock)TransactionPanel.Children[i]);
        if(CurrentTextBox.Name == "CelleQueJeVeux")
        {
          CurrentTextBox.Text = "Nouveau contenu";
          Break;
        }
      }
      i++;
    }
    (d'ailleurs l'ide ne voulait pas compiler à cause de cette ligne, j'ai testé sans et ca marche bien)

    Merci encore

  9. #9
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    C'est un test de type afin que le cast qu'il y a derrière se face sans problème.

    Si tu ne mets pas ça tu aurais une erreur si le contrôle rencontré est une Listbox par exemple ...

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Effectivement, c'est bon à savoir merci.

    je comprend pourquoi dans mon cas j'ai pu m'en passer puisque j'ai fais un panel spécialement pour ces textbloc il n'y pas d'autres élément dedans.

    Merci beaucoup pour ces explications

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2015, 12h00
  2. ouverture d'un classeur dont son nom se trouve dans une cellule
    Par mosta2010 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/02/2008, 16h55
  3. Cocher au moins une checkbox dont son nombre varie
    Par Seb981 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/08/2007, 15h02
  4. Réponses: 4
    Dernier message: 22/02/2007, 10h01
  5. Réponses: 7
    Dernier message: 25/10/2005, 15h19

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