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 :

Mettre à jour une liste de champs TextBox dans une boucle


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut Mettre à jour une liste de champs TextBox dans une boucle
    Bonjour,
    Je suis débutant en C#.
    Je programme avec Visual Studio 2015 Community et C# avec des fenêtres WPF
    Je souhaite faire une boucle while ou for pour mettre à jour des champs TexBox qui s'appellent TxbM1 à TxbM12.
    Mais je n'arrive pas à convertir une chaine de caractère en objet TextBox. pour mettre dans une variable le nom d'un champ et pouvoir l'utiliser pour modifier son statut et ou sa valeur par référence au champ existant dans mon formulaire WPF.
    Je souhaiterai faire ça par Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private void btnModif_Click(object sender, RoutedEventArgs e)
    {
       string VpcTexte = "TxbM";
       TxtBox VpcChamp = new TxtBox();
       for(int i = 1;1 < 13;i++)
       {
            VpcChamp = VpcTexte + i.ToString();
            @VpcChamp.IsEnabled = true;     // Avidement cette ligne ne fonctionne pas, comment  faire
            @VpcChamp.isReadOnly = false;  // Avidement cette ligne ne fonctionne pas, comment  faire
     
       }
    }
    pour éviter ç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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    private void btnModif_Click(object sender, RoutedEventArgs e)
    {
       txbM1.IsEnabled = true;
       txbM2.IsEnabled = true;
       txbM3.IsEnabled = true;
       txbM4.IsEnabled = true;
       txbM5.IsEnabled = true;
       txbM6.IsEnabled = true;
       txbM7.IsEnabled = true;
       txbM8.IsEnabled = true;
       txbM9.IsEnabled = true;
       txbM10.IsEnabled = true;
       txbM11.IsEnabled = true;
       txbM12.IsEnabled = true;
       txbM1.IsReadOnly = false;
       txbM2.IsReadOnly = false;
       txbM3.IsReadOnly = false;
       txbM4.IsReadOnly = false;
       txbM5.IsReadOnly = false;
       txbM6.IsReadOnly = false;
       txbM7.IsReadOnly = false;
       txbM8.IsReadOnly = false;
       txbM9.IsReadOnly = false;
       txbM10.IsReadOnly = false;
       txbM11.IsReadOnly = false;
       txbM12.IsReadOnly = false;
    }[/INDENT]
    Merci d'avance pour vos conseils.

  2. #2
    Membre chevronné Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Par défaut
    Bonjour ,

    La magie avec WPF c'est les bindings , apprend à les utiliser et ce que tu cherches à faire ce fait en une seule ligne de code.

    http://www.wpf-tutorial.com/data-binding/introduction/

    bon code !

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Moins évident que tu ne l'ais cru...

    1/Pour des TextBoxes ou autres UI éléments créés via XAML ,la méthode FindName(string nomElem) suffit amplement ....

    2/ Pour des TextBoxes ou autres UI éléments créés via code-behind et nommés ,il faut leur attribuer une portée de nom ou NameScope.
    Le NameScope est effectué via la methode RegisterName(string nomElem, UIElement elem) ...
    Sinon la recherche par nom avec FindName() echoue (renvoi null)....

    code xaml du Form exemple :
    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
    19
    20
    21
    22
    23
    24
     
     
    <Window x:Class="WpfComboBox.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid  Loaded="Grid_Loaded">
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
     
            <DockPanel Grid.Row="0">
                <Button Name="btnModif" Content="Modification" Width="100" Click="btnModif_Click"/>
            </DockPanel>
            <StackPanel  Name="pnl" Grid.Row="1" Orientation="Horizontal">
                <TextBox x:Name="TxbM1" Text="TxbM1" Foreground="Red" IsEnabled="False" IsReadOnly="true" Margin="5"/>
                <TextBox x:Name="TxbM2" Text="TxbM2" Foreground="Red" IsEnabled="False" IsReadOnly="true" Margin="5"/>
                <TextBox x:Name="TxbM3" Text="TxbM3" Foreground="Red" IsEnabled="False" IsReadOnly="true" Margin="5"/>
                <TextBox x:Name="TxbM4" Text="TxbM4" Foreground="Red" IsEnabled="False" IsReadOnly="true" Margin="5"/>
            </StackPanel>
     
        </Grid>
    </Window>
    code behind .cs du Form:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    namespace WpfComboBox
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
     
            }
            private void Grid_Loaded(object sender, RoutedEventArgs e)
            {
                    string prefixName = "TxbM";
                    TextBox tb  ;
     
                    tb = new TextBox();
                    tb.Name = prefixName + (104).ToString();
                    RegisterName(tb.Name, tb); //nota bene necessaire sinon recherche par nom echoue(FindName)
     
                    tb.Text = "TxbM" + (104).ToString();
                    tb.Foreground = Brushes.Brown ;
                    tb.Margin = new Thickness(5);
                    tb.IsEnabled = false;
                    tb.IsReadOnly = true;
     
                    pnl.Children.Add(tb);
     
            }
            private void btnModif_Click(object sender, RoutedEventArgs e)
            {
                string prefixName = "TxbM";
                string tbName;
                TextBox tb;
                for (int i = 1; i < 5; i++)
                {
                    tbName = prefixName + i.ToString();
                    tb = FindName(tbName) as TextBox;
                    if (tb != null)
                    {
                       tb.IsEnabled = true;     // Avidement cette ligne ne fonctionne pas, comment  faire
                       tb.IsReadOnly = false;  // Avidement cette ligne ne fonctionne pas, comment  faire
                       tb.Background= Brushes.Beige  ;
                    }
     
                }
                tbName=prefixName+(104).ToString();
                tb = FindName(tbName) as TextBox;
                if (tb != null)
                {
                    tb.IsEnabled = true;     
                    tb.IsReadOnly = false;
                    tb.Background = Brushes.DarkBlue;
                }  
            }
     
     
     
     
        }
    }
    bon code....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut Merci pour votre aide
    Merci pour vos réponses je vais tester tout ça.

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/10/2016, 15h07
  2. Réponses: 16
    Dernier message: 06/03/2015, 00h14
  3. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  4. Réponses: 4
    Dernier message: 01/03/2012, 19h50
  5. Réponses: 2
    Dernier message: 29/02/2012, 15h20

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