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 :

ajout textbox dynamiquement


Sujet :

Windows Forms

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut ajout textbox dynamiquement
    Bonjour,
    je souhaiterais savoir comment faire pour créer plusieurs objets dynamiquement à partir de la valeur d'une listbox.
    En gros je voudrais que lorsque dans ma listbox, je choisi la valeur 4, j'ai 4 nouvelles textbox qui soit créer dans ma fenêtre, voir dans une seconde fenêtre si besoin cela ne me pose pas de problème.
    Merci par avance.

    [edit] par la même occasion, comment faire pour changer la taille de la fenêtre en fonction de la valeur choisi?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Points : 191
    Points
    191
    Par défaut
    Si tu dis que le nombre inscrit dans ton dropdownlist correspond aux nombres d'objects que tu veux créer tu peux simplement faire une boucler (for) avec le nombre et instancier chacun de tes nouveaux contrôles 1 à 1 et les positionner à l'endroit souhaité dans ta page.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for int i = 0; i < 4; i++)
    {
    TextBox textBox = new TextBox()
    //Tu définis tes propriétés de ton textbox
    }
    À mon avis ca ressemble à ca. Et pour redimensionner ta fenêtre tu peux simplement calculer le width et le height que tes textbox prennes et confirmer avec les paramètres de ta page actuelle pour ensuite changer les paramètres s'il y a lieu.

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    j'ai réussi à approcher de mon but avec ce code :
    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
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                int counter = comboBox1.SelectedIndex;
                int posx = 225;
                int posy = 35;
                for (int i = 0; i < counter; i++, posy += 20)
    			{
                    TextBox myTb = new TextBox();
                    myTb.Name = "text_" + counter;
                    myTb.Location = new Point(posx, posy);
                    myTb.Size = new
                    System.Drawing.Size(160, 20);
                    this.Controls.Add(myTb);
                }
            }
    Mais j'ai un soucis, comment faire pour supprimer toutes les textbox et en créer de nouvelles lorsque je change l'index?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Points : 191
    Points
    191
    Par défaut
    Ajoute les dans un array?? ensuite tu parcours tes textbox 1 à 1 pour faire des remove dessus. Sinon bien tu peux parcourir chacun des contrôles et vérifier s'il s'agit bien d'un textbox.

    J'imagine qu'il doivent avoir un id ou une valeur spécifique pour les identifiers. Tu peux vérifier si dans leur nom la valeur est contenu et si c'est le cas tu le retire.

  5. #5
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    voici le code que j'ai complet pour l'ajout :
    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
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                int counter = comboBox1.SelectedIndex;
                int Tb_posx = 250;
                int Tb_posy = 60;
                int Lb_posx = 185;
                int Lb_posy = 60;
                int FormHeight = Form.ActiveForm.Size.Height;
                for (int i = 1; i <= counter; i++, Tb_posy += 40, Lb_posy += 40)
    			{
                    TextBox myTb = new TextBox();
                    Label myLb = new Label();
                    myTb.Name = "text_" + i;
                    myLb.Name = "text_" + i;
                    myLb.Text = "choix n°" + i;
                    myTb.Location = new Point(Tb_posx, Tb_posy);
                    myLb.Location = new Point(Lb_posx, Lb_posy);
                    myTb.Size = new System.Drawing.Size(160, 20);
                    myLb.Size = new System.Drawing.Size(100, 13);
                    this.Controls.Add(myTb);
                    this.Controls.Add(myLb);
                    FormHeight = +20;
                    System.Drawing.Size FormSize = new Size(700, FormHeight);
     
                }
            }
    Mon pb c'est que la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Drawing.Size FormSize = new Size(700, FormHeight);
    Ne fonctionne pas du tout. Comment faire ?

    Pour ce qui est de la suppression j'aimerais suivre ton conseil
    Sinon bien tu peux parcourir chacun des contrôles et vérifier s'il s'agit bien d'un textbox.
    Mais je ne sais comment faire pour parcourir tous les controls de ma form
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Points : 191
    Points
    191
    Par défaut
    Je crois que ceci est un bon début pour ton retrait de contrôle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(Control control in this.Controls)
    {
        if((control is TextBox) && (control.Name.Contains(""))
        {
             this.Controls.Remove(control);
        }
    }

  7. #7
    Membre expérimenté
    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
    Points : 1 521
    Points
    1 521
    Par défaut
    Citation Envoyé par stroumfs Voir le message
    Je crois que ceci est un bon début pour ton retrait de contrôle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach(Control control in this.Controls)
    {
        if((control is TextBox) && (control.Name.Contains(""))
        {
             this.Controls.Remove(control);
        }
    }
    Modifier la collection pendant un foreach ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Drawing.Size FormSize = new Size(700, FormHeight);
    En quoi ça "ne fonctionne pas du tout ?". La seule chose que fait cette ligne, c'est de créer une structure Size de dimension 700xFormHeight. Si tu voulais l'affecter à la taille de la fenêtre, il manque quelque chose...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Points : 191
    Points
    191
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Modifier la collection pendant un foreach ?
    Effectivement je viens de réaliser mon erreur la suppression pendant un foreach est une mauvaise idée. Je m'en excuse.

  9. #9
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Modifier la collection pendant un foreach ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Drawing.Size FormSize = new Size(700, FormHeight);
    En quoi ça "ne fonctionne pas du tout ?". La seule chose que fait cette ligne, c'est de créer une structure Size de dimension 700xFormHeight. Si tu voulais l'affecter à la taille de la fenêtre, il manque quelque chose...
    En effet je me suis bien douté qu'il manque quelque chose, mais je ne vois pas quoi.
    Quel est le code qui manque?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  10. #10
    Membre expérimenté
    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
    Points : 1 521
    Points
    1 521
    Par défaut
    Citation Envoyé par ludojojo Voir le message
    En effet je me suis bien douté qu'il manque quelque chose, mais je ne vois pas quoi.
    Quel est le code qui manque?
    Affecter le System.Drawing.Size à la propriété Size du formulaire ?

  11. #11
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    comment faire cela?
    Serait il possible de voir un exemple svp?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  12. #12
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Size = new Size(700, FormHeight);
    C'est pas compliqué, suffit de chercher


    Pour la suppression, à la place du foreach fait un for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i = 0; i < this.Controls.Count; i++)
    {
        if((this.Controls[i] is TextBox) && (this.Controls[i].Name.Contains(""))
        {
             this.Controls.Remove(this.Controls[i]);
        }
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  13. #13
    Membre expérimenté
    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
    Points : 1 521
    Points
    1 521
    Par défaut
    Citation Envoyé par laedit Voir le message

    Pour la suppression, à la place du foreach fait un for :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int i = 0; i < this.Controls.Count; i++)
    {
        if((this.Controls[i] is TextBox) && (this.Controls[i].Name.Contains(""))
        {
             this.Controls.Remove(this.Controls[i]);
        }
    }
    Hum, je suis pas sûr non plus .

    Quand tu supprimes un contrôle, tu modifies this.Controls.Count et donc tu arrives plus vite à la fin de la boucle en oubliant au passage quelques éléments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int position = 0;
    while(position < this.Controls.Count) {
       if(this.Controls[position] is TextBox) {
          this.Controls.RemoveAt(position);
       } else {
          position++;
       }
    }

  14. #14
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Cela revient au même, vu que tu utilise aussi this.Controls.Count, non ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  15. #15
    Membre expérimenté
    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
    Points : 1 521
    Points
    1 521
    Par défaut
    Prenons i = 3 et Controls.Count = 5.

    Ton code vérifie que Controls[3] est un TextBox, ce qui est le cas : il l'enlève donc. Le contrôle d'index 3 est supprimé et donc le contrôle d'index 4 devient le contrôle d'index 3 et Controls.Count est égal à 4. Ensuite i est incrémenté et vont donc 4 ce qui fait sortir du for. Le dernier contrôle n'a pas été supprimé alors que ça pourrait être un TextBox : ton code saute un contrôle chaque fois qu'il en supprime un. Pour que ça fonctionne, il aurait fallu ajouter un i-- (mais c'est moche de modifier le compteur dans la boucle) ou un while(Controls[i] is TextBox) pour continuer à supprimer tant que c'est un TextBox (je viens de voir cette solution qui est pas plus mal mais il faut ajouter aussi une condition pour vérifier que this.Controls.Count > 0 sinon on plante si il n'y a que des TextBox dans la collection).

    Mon code vérifie que Controls[3] est un TextBox, ce qui est le cas : il l'enlève mais n'augmente pas la position à vérifier. Le contrôle d'index 3 étant supprimé, le contrôle d'index 4 devient le contrôle d'index 3. position est toujours égal à 3. Il n'y a donc pas de saut.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i = 0 ; i < this.Controls.Count ; i++) {
       while(this.Controls.Count > 0 && this.Controls[i] is TextBox) {
          this.Controls.RemoveAt(i);
       }
    }

  16. #16
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Merci pour toutes ces réponse !
    Cela fonctionne très bien.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

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

Discussions similaires

  1. ajout de textbox dynamique
    Par parlaciel dans le forum Silverlight
    Réponses: 1
    Dernier message: 25/03/2009, 18h42
  2. Réponses: 1
    Dernier message: 11/02/2008, 11h40
  3. [JPanel][pb refresh] ajout composnat dynamiquement
    Par Invité dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 10/04/2006, 17h00
  4. [vb.net] définir un textbox dynamiquement
    Par arnolem dans le forum Windows Forms
    Réponses: 13
    Dernier message: 05/12/2005, 15h51
  5. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50

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