none
Les TextBox multiples RRS feed

  • Question

  • Bonjour, je viens vers vous pour vous demandez s'il y'aurait un moyen de se simplifier la vie quand on a une multitude de TextBox ?

    J'utilise Visual Basic 2008 express, dans mon projet j'ai un bon nombre de TextBox dans la meme form (63 pour etre precis :-)) et je voudrais savoir s'il est possible de faire une boucle pour pouvoir tous les tester ?

    Afin de supprimer :

    if TextBox1 ...

    if TextBox2 ... etc

    Merci de vos réponses.

    Cordialement.

    dimanche 16 décembre 2012 16:40

Réponses

  • Bonsoir Papasayans

    Il faut faire une collection, tu n'as plus qu'à copier coller comme indiqué, c'est fait.

    Si ça te convient, tu peux cliquer sur le triangle vert haut gauche de cette réponse pour attribuer un point, et en bas cliquer sur résolu.

    J'ai fait un générateur de collection et autre pour vbNet, gratuit (Aide VBnet + sources Aide vbNet 10), à télécharger ici :

    http://irolog.free.fr/gratuit.htm

    Dim tb As New Collection() ' global
    
    tb.Add(TextBox1) ' dans le Load
    tb.Add(TextBox2)
    tb.Add(TextBox3)
    tb.Add(TextBox4)
    tb.Add(TextBox5)
    tb.Add(TextBox6)
    tb.Add(TextBox7)
    tb.Add(TextBox8)
    tb.Add(TextBox9)
    tb.Add(TextBox10)
    tb.Add(TextBox11)
    tb.Add(TextBox12)
    tb.Add(TextBox13)
    tb.Add(TextBox14)
    tb.Add(TextBox15)
    tb.Add(TextBox16)
    tb.Add(TextBox17)
    tb.Add(TextBox18)
    tb.Add(TextBox19)
    tb.Add(TextBox20)
    tb.Add(TextBox21)
    tb.Add(TextBox22)
    tb.Add(TextBox23)
    tb.Add(TextBox24)
    tb.Add(TextBox25)
    tb.Add(TextBox26)
    tb.Add(TextBox27)
    tb.Add(TextBox28)
    tb.Add(TextBox29)
    tb.Add(TextBox30)
    tb.Add(TextBox31)
    tb.Add(TextBox32)
    tb.Add(TextBox33)
    tb.Add(TextBox34)
    tb.Add(TextBox35)
    tb.Add(TextBox36)
    tb.Add(TextBox37)
    tb.Add(TextBox38)
    tb.Add(TextBox39)
    tb.Add(TextBox40)
    tb.Add(TextBox41)
    tb.Add(TextBox42)
    tb.Add(TextBox43)
    tb.Add(TextBox44)
    tb.Add(TextBox45)
    tb.Add(TextBox46)
    tb.Add(TextBox47)
    tb.Add(TextBox48)
    tb.Add(TextBox49)
    tb.Add(TextBox50)
    tb.Add(TextBox51)
    tb.Add(TextBox52)
    tb.Add(TextBox53)
    tb.Add(TextBox54)
    tb.Add(TextBox55)
    tb.Add(TextBox56)
    tb.Add(TextBox57)
    tb.Add(TextBox58)
    tb.Add(TextBox59)
    tb.Add(TextBox60)
    tb.Add(TextBox61)
    tb.Add(TextBox62)
    tb.Add(TextBox63)
    
    
    ' si tu as besoin d'utiliser un procédure _click ou autre, à rajouter en fin... (et en début, attention à la syntaxe)
    Sub tb_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click, TextBox2.Click, TextBox3.Click, TextBox4.Click, TextBox5.Click, TextBox6.Click, TextBox7.Click, TextBox8.Click, TextBox9.Click, TextBox10.Click, TextBox11.Click, TextBox12.Click, TextBox13.Click, TextBox14.Click, TextBox15.Click, TextBox16.Click, TextBox17.Click, TextBox18.Click, TextBox19.Click, TextBox20.Click, TextBox21.Click, TextBox22.Click, TextBox23.Click, TextBox24.Click, TextBox25.Click, TextBox26.Click, TextBox27.Click, TextBox28.Click, TextBox29.Click, TextBox30.Click, TextBox31.Click, TextBox32.Click, TextBox33.Click, TextBox34.Click, TextBox35.Click, TextBox36.Click, TextBox37.Click, TextBox38.Click, TextBox39.Click, TextBox40.Click, TextBox41.Click, TextBox42.Click, TextBox43.Click, TextBox44.Click, TextBox45.Click, TextBox46.Click, TextBox47.Click, TextBox48.Click, TextBox49.Click, TextBox50.Click, TextBox51.Click, TextBox52.Click, TextBox53.Click, TextBox54.Click, TextBox55.Click, TextBox56.Click, TextBox57.Click, TextBox58.Click, TextBox59.Click, TextBox60.Click, TextBox61.Click, TextBox62.Click, TextBox63.Click
     Dim i As Integer = 0
     For i = 1 To tb.Count
      If tb.Item(i).Name = sender.Name Then MsgBox("L'index est : " & i)
     Next i
    End Sub
    

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Proposé comme réponse EhJoe dimanche 16 décembre 2012 17:11
    • Marqué comme réponse Aurel Bera jeudi 20 décembre 2012 07:14
    dimanche 16 décembre 2012 17:11
  • Bonjour,

    Une autre solution... au cas où ton formulaire serait terminé :

    For Each txt As TextBox In Me.Controls
        If TypeOf txt Is TextBox Then 'si c'est une TextBox
            If txt.Text = "" Then
                MsgBox("la textbox est vide")
            Else
                MsgBox("elle n'est pas vide")
            End If
        End If
    Next


    Jacques

    • Marqué comme réponse TroxsaEditor dimanche 16 décembre 2012 19:06
    • Non marqué comme réponse TroxsaEditor dimanche 16 décembre 2012 21:47
    • Proposé comme réponse TroxsaEditor dimanche 16 décembre 2012 21:48
    • Marqué comme réponse Aurel Bera jeudi 20 décembre 2012 07:14
    dimanche 16 décembre 2012 17:43

Toutes les réponses

  • Bonsoir Papasayans

    Il faut faire une collection, tu n'as plus qu'à copier coller comme indiqué, c'est fait.

    Si ça te convient, tu peux cliquer sur le triangle vert haut gauche de cette réponse pour attribuer un point, et en bas cliquer sur résolu.

    J'ai fait un générateur de collection et autre pour vbNet, gratuit (Aide VBnet + sources Aide vbNet 10), à télécharger ici :

    http://irolog.free.fr/gratuit.htm

    Dim tb As New Collection() ' global
    
    tb.Add(TextBox1) ' dans le Load
    tb.Add(TextBox2)
    tb.Add(TextBox3)
    tb.Add(TextBox4)
    tb.Add(TextBox5)
    tb.Add(TextBox6)
    tb.Add(TextBox7)
    tb.Add(TextBox8)
    tb.Add(TextBox9)
    tb.Add(TextBox10)
    tb.Add(TextBox11)
    tb.Add(TextBox12)
    tb.Add(TextBox13)
    tb.Add(TextBox14)
    tb.Add(TextBox15)
    tb.Add(TextBox16)
    tb.Add(TextBox17)
    tb.Add(TextBox18)
    tb.Add(TextBox19)
    tb.Add(TextBox20)
    tb.Add(TextBox21)
    tb.Add(TextBox22)
    tb.Add(TextBox23)
    tb.Add(TextBox24)
    tb.Add(TextBox25)
    tb.Add(TextBox26)
    tb.Add(TextBox27)
    tb.Add(TextBox28)
    tb.Add(TextBox29)
    tb.Add(TextBox30)
    tb.Add(TextBox31)
    tb.Add(TextBox32)
    tb.Add(TextBox33)
    tb.Add(TextBox34)
    tb.Add(TextBox35)
    tb.Add(TextBox36)
    tb.Add(TextBox37)
    tb.Add(TextBox38)
    tb.Add(TextBox39)
    tb.Add(TextBox40)
    tb.Add(TextBox41)
    tb.Add(TextBox42)
    tb.Add(TextBox43)
    tb.Add(TextBox44)
    tb.Add(TextBox45)
    tb.Add(TextBox46)
    tb.Add(TextBox47)
    tb.Add(TextBox48)
    tb.Add(TextBox49)
    tb.Add(TextBox50)
    tb.Add(TextBox51)
    tb.Add(TextBox52)
    tb.Add(TextBox53)
    tb.Add(TextBox54)
    tb.Add(TextBox55)
    tb.Add(TextBox56)
    tb.Add(TextBox57)
    tb.Add(TextBox58)
    tb.Add(TextBox59)
    tb.Add(TextBox60)
    tb.Add(TextBox61)
    tb.Add(TextBox62)
    tb.Add(TextBox63)
    
    
    ' si tu as besoin d'utiliser un procédure _click ou autre, à rajouter en fin... (et en début, attention à la syntaxe)
    Sub tb_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click, TextBox2.Click, TextBox3.Click, TextBox4.Click, TextBox5.Click, TextBox6.Click, TextBox7.Click, TextBox8.Click, TextBox9.Click, TextBox10.Click, TextBox11.Click, TextBox12.Click, TextBox13.Click, TextBox14.Click, TextBox15.Click, TextBox16.Click, TextBox17.Click, TextBox18.Click, TextBox19.Click, TextBox20.Click, TextBox21.Click, TextBox22.Click, TextBox23.Click, TextBox24.Click, TextBox25.Click, TextBox26.Click, TextBox27.Click, TextBox28.Click, TextBox29.Click, TextBox30.Click, TextBox31.Click, TextBox32.Click, TextBox33.Click, TextBox34.Click, TextBox35.Click, TextBox36.Click, TextBox37.Click, TextBox38.Click, TextBox39.Click, TextBox40.Click, TextBox41.Click, TextBox42.Click, TextBox43.Click, TextBox44.Click, TextBox45.Click, TextBox46.Click, TextBox47.Click, TextBox48.Click, TextBox49.Click, TextBox50.Click, TextBox51.Click, TextBox52.Click, TextBox53.Click, TextBox54.Click, TextBox55.Click, TextBox56.Click, TextBox57.Click, TextBox58.Click, TextBox59.Click, TextBox60.Click, TextBox61.Click, TextBox62.Click, TextBox63.Click
     Dim i As Integer = 0
     For i = 1 To tb.Count
      If tb.Item(i).Name = sender.Name Then MsgBox("L'index est : " & i)
     Next i
    End Sub
    

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    • Proposé comme réponse EhJoe dimanche 16 décembre 2012 17:11
    • Marqué comme réponse Aurel Bera jeudi 20 décembre 2012 07:14
    dimanche 16 décembre 2012 17:11
  • Merci pour ta réponse, je vais essayer et te tiendrais au courant. Je suis un débutant en programmation vba ^^

    Cordialement.


    • Modifié Papasayans dimanche 16 décembre 2012 17:18
    dimanche 16 décembre 2012 17:17
  • Bonjour,

    Une autre solution... au cas où ton formulaire serait terminé :

    For Each txt As TextBox In Me.Controls
        If TypeOf txt Is TextBox Then 'si c'est une TextBox
            If txt.Text = "" Then
                MsgBox("la textbox est vide")
            Else
                MsgBox("elle n'est pas vide")
            End If
        End If
    Next


    Jacques

    • Marqué comme réponse TroxsaEditor dimanche 16 décembre 2012 19:06
    • Non marqué comme réponse TroxsaEditor dimanche 16 décembre 2012 21:47
    • Proposé comme réponse TroxsaEditor dimanche 16 décembre 2012 21:48
    • Marqué comme réponse Aurel Bera jeudi 20 décembre 2012 07:14
    dimanche 16 décembre 2012 17:43
  • Bonjour,

    Petite précision sur le code de Paraglider

    si les Textbox son dans un autre conteneur du style panel ou un autre il faudra faire la boucle For each depuis le conteneur qui contient les textbox

    Par exemple : "For Each txt As TextBox In Panel1.Controls"


    Cordialement,

    dimanche 16 décembre 2012 19:10
    Auteur de réponse
  • j'ai 21 GroupBox et a l'interieur se trouve 3 TextBox. Ca va compliquer les tests ?

    Cordialement

    dimanche 16 décembre 2012 19:26
  • Non, il suffira de faire une boucle imbriquer

    la premier boucle va lire les groupBox et la seconde va lire textbox

    ou alors une simple fonction récursive qui va parcourir les controles et retourné ce qu'il faut ...

    Si vous n'y arriver pas je peux vous donner un exemple :-) 


    Cordialement,

    dimanche 16 décembre 2012 19:47
    Auteur de réponse
  • ...

    Si tu utilises en tant que collection, c'est l'ordre d'entrée dans la liste qui compte (qui commence à 1), ainsi tu peux entrer par exemple 10 textBox, puis 5 label, puis x... C'est mieux à mon sens de les regrouper pour l'indexation.

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire


    dimanche 16 décembre 2012 19:59
  • Re :-)

    j'ai voulu faire un petit test avec 5 GroupBox avec plusieurs Textbox dedans et voila ce que ça donne :

    Public Class Form1
        Private all As New List(Of Control)
        Private Function GetControl(parent As Control) As List(Of Control)
            For Each txt As Control In parent.Controls
          
    
                If TypeOf txt Is TextBox Then
                    ' Console.WriteLine(txt.Name)
                    all.Add(txt)
                End If
    
                If txt.Controls.Count > 0 Then
                    GetControl(txt)
                End If
            Next
            Return all
        End Function
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            GetControl(Me)
            For i As Integer = 0 To all.Count - 1
                Console.WriteLine(all(i).Name)
            Next
        End Sub
    End Class

    Sortie de la console : 

    TextBox6
    TextBox7
    TextBox8
    TextBox9
    TextBox10
    TextBox11
    TextBox12
    TextBox13
    TextBox14
    TextBox15
    TextBox16
    TextBox17
    TextBox18
    TextBox19
    TextBox20
    TextBox21
    TextBox22
    TextBox23
    TextBox24
    TextBox25
    TextBox26
    TextBox27
    TextBox28
    TextBox29
    TextBox30
    TextBox5
    TextBox4
    TextBox3
    TextBox2
    TextBox1

    Il est vrai que une boucle va peut etre sortir une liste de contrôle complément désordonnée car une list typé en controle ne sais pas faire de triage sur des objet de type controle, car il y a une multitude de propriété dans un contrôle.
    Mais nous pouvons très bien définir un critère de triage après !


    Cordialement,


    dimanche 16 décembre 2012 21:46
    Auteur de réponse
  • Bonjour,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 18 décembre 2012 08:42
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 20 décembre 2012 07:12
  • Désolé pour ce retard dans ma réponse, mais ayant beaucoup de travail ces derniers jours,je n'ai pu tester les solutions proposés.

    Je testerais tous ca se week end, encore une fois je vous remerci de toutes ces solutions que vous m'avez proposé.

    Cordialement.

    jeudi 20 décembre 2012 13:11