Nom de TextBox Dynamique | VB.net

Résolu
Bonjour tout le monde,

Je suis toujours en train de coder mon application pour un stage, mais je galère à nouveau sur un truc qui me parait simple dans l'idée mais je ne trouve absolument aucune aide qui me corresponde sur le net.

En fait j'ai des TextBox du style :
TB_N_Prenom1 TB_NB_N_1 TB_P_N_1
TB_N_Prenom2 TB_NB_N_2 TB_P_N_2
TB_N_Prenom3 TB_NB_N_3 TB_P_N_3
TB_N_Prenom4 TB_NB_N_4 TB_P_N_4
TB_N_Prenom5 TB_NB_N_5 TB_P_N_5
TB_N_Prenom6 TB_NB_N_6 TB_P_N_6

TB_O_Prenom1 TB_NB_O_1 TB_P_O_1
TB_O_Prenom2 TB_NB_O_2 TB_P_O_2
TB_O_Prenom3 TB_NB_O_3 TB_P_O_3
TB_O_Prenom4 TB_NB_O_4 TB_P_O_4
TB_O_Prenom5 TB_NB_O_5 TB_P_O_5
TB_O_Prenom6 TB_NB_O_6 TB_P_O_6

TB_F_Prenom1 TB_NB_F_1 TB_P_F_1
TB_F_Prenom2 TB_NB_F_2 TB_P_F_2
TB_F_Prenom3 TB_NB_F_3 TB_P_F_3
TB_F_Prenom4 TB_NB_F_4 TB_P_F_4
TB_F_Prenom5 TB_NB_F_5 TB_P_F_5
TB_F_Prenom6 TB_NB_F_6 TB_P_F_6

Voilà en gros mes textbox.

On repère bien que j'ai repris la même forme, avec juste le chiffre qui change, et une lettre en fonction de ce que je veux.

En fait j'aimerais pouvoir utiliser par exemple dans une boucle for : TB_N_Prenom & i.

J'ai tout essayé, ou presque vu que je vous sollicite pour m'aider.

Voilà un aperçu de ce que j'ai tenté :

 For i = 0 To 1 
            myreaderreservation.Read() 
            NBparcatégorie.Connection() = sqlCnx 
            NBparcatégorie.CommandText() = "SELECT COUNT(codeeleve),prenome, prix FROM reservation,eleves,avoir,prixcantine WHERE reservation.codeelever=eleves.codeeleve AND eleves.codeeleve=avoir.codeelevea AND reservation.codeprixr = prixcantine.codeprix AND typerepas = 'RR' AND codeparenta=" & CInt(moncode(0)) & "GROUP BY prenome,prix" 
            myreadercatégorie = NBparcatégorie.ExecuteReader() 

            For j = 0 To NBenffamille.ExecuteScalar - 1 
                myreadercatégorie.Read() 
                Controls("TB_N_Prenom_" & i).Text = myreadercatégorie(1) 
                Controls("TB_NB_N_" & i).Text = myreadercatégorie(0) 
                Controls("TB_P_N_" & i).Text = myreadercatégorie(2) 
            Next 

            myreadercatégorie.Close() 

            NBparcatégorie.CommandText() = "SELECT COUNT(codeeleve),prenome, prix FROM reservation,eleves,avoir,prixcantine WHERE reservation.codeelever=eleves.codeeleve AND eleves.codeeleve=avoir.codeelevea AND reservation.codeprixr = prixcantine.codeprix AND typerepas = 'OC' AND codeparenta=" & CInt(moncode(0)) & " GROUP BY prenome,prix" 
            myreadercatégorie = NBparcatégorie.ExecuteReader() 

            For j = 0 To NBenffamille.ExecuteScalar - 1 
                myreadercatégorie.Read() 
                Controls("TB_O_Prenom_" & i).Text = myreadercatégorie(1) 
                Controls("TB_NB_O_" & i).Text = myreadercatégorie(0) 
                Controls("TB_P_O_" & i).Text = myreadercatégorie(2) 

            Next 

            myreadercatégorie.Close() 

            NBparcatégorie.CommandText() = "SELECT COUNT(codeeleve),prenome, prix FROM reservation,eleves,avoir,prixcantine WHERE reservation.codeelever=eleves.codeeleve AND eleves.codeeleve=avoir.codeelevea AND reservation.codeprixr = prixcantine.codeprix AND typerepas = 'PF' AND codeparenta=" & CInt(moncode(0)) & " GROUP BY prenome,prix" 
            myreadercatégorie = NBparcatégorie.ExecuteReader() 

            For j = 0 To NBenffamille.ExecuteScalar - 1 
                myreadercatégorie.Read() 
                Controls("TB_F_Prenom_" & i).Text = myreadercatégorie(1) 
                Controls("TB_NB_F_" & i).Text = myreadercatégorie(0) 
                Controls("TB_P_F_" & i).Text = myreadercatégorie(2) 

            Next 

            myreadercatégorie.Close() 

        Next 


J'espère avoir été assez explicite pour me faire comprendre :)

Merci d'avance,

Xineroks

4 réponses

  1. Merci beaucoup à toi !
    La réponse me convient parfaitement, c'est exactement ce que je voulais!
    Ton aide me permet enfin d'avancer.

    Merci encore,

    Cdt,

    Xineroks
    1. Bonjour,

      Il te faudra inévitablement découper le travail :

      Exemple type :

      Private Sub Lecture()
      
      	' ...
      	' code précédent
      	'
      	For j = 0 To NBenffamille.ExecuteScalar - 1
      		myreadercatégorie.Read()
      		ChangeValeurTextBox("TB_F_Prenom_" & i, myreadercatégorie(1))
      		ChangeValeurTextBox("TB_NB_F_" & i, myreadercatégorie(0))
      		ChangeValeurTextBox("TB_P_F_" & i, myreadercatégorie(2))
      	Next
      
      	'
      	' code suivant
      	' ...
      
      End Sub
      
      Private Sub ChangeValeurTextBox(ByVal pNom As String, ByVal pValeur As String)
      
      	Dim Ctrl As System.Windows.Forms.Control
      
      	For Each Ctrl In Me.Controls
      		If Ctrl.GetType Is GetType(TextBox) Then
      			If (Ctrl.Name = pNom) Then
      				Ctrl.Text = pValeur
      			End If
      		End If
      	Next
      
      End Sub
      


      Cdt

      Lupin
      1. Salut,

        Merci pour ta réponse, j'essaierais demain ces instructions. Ça m'a l'air beaucoup plus abouti que ce que j'ai trouvé

        A bientôt
    2. Pour faire vraiment plus simple l'explication

      j'aimerais un code qui fonctionne du style :

      for i = 0 to 10
      (textbox & i).text = "unevaleur"
      next

      PS : C'est très urgent, sans ça je ne peux pas avancer
      1. Up
      2. up
    3. Ou même s'il faut, faire par index. D'ailleurs je serais curieux de voir les 2 manières.
      J'ai fais ( même présentation ) :
      400 410 420
      401 411 421
      402 412 422
      403 413 423
      404 414 424
      405 415 425

      500 510 520
      501 511 521
      ...
      ...
      etc...
      1. J'ai tenté aussi avec :

        dim test as control 
        for each test in me.controls 
            if typeof test is textbox 
                test.name="valeur"     
                test.text="montext"    
            end if 
        
        next 
        


        Le soucis c'est que ça ne correspond pas non plus.