Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer des contrôles à la volée - dynamiquement

VB.NET - indexation ?

Sujet résolu
Anonyme
    5 mai 2011 à 10:22:56

    Salut !
    Je cherche a créer des contrôle pendant l’exécution d'un programme.
    En fait mon idée c'est que j'ai un contrôle personnalisé, et une textbox.
    Le contrôle personnalisé doit apparaître autant de fois qu'il est inscrit dans la textbox, et le nombre de contrôle doit changer dynamiquement si le nombre de la textbox change.
    Es ce que vous avez l'adresse d'un tutoriel, car j'ai beau chercher, j'ai rien trouver, je doit mal mis prendre ...
    Es ce que l'indexation peut être utile ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2011 à 15:13:42

      Bonjour,

      Rajoute un évènement sur le textchanged du textbox, ensuite rajoute un "panel" dans ta page.

      Puis essaie ceci : (le code est en C#)

      for(int i=0; i < Convert.ToInt32(tontextbox.Text); i++)
      {
         tonPanel.Controls.Add(new tonComposant());
      }
      


      Pour faire vraiment propre vérifie que ce qui est insérer dans ton textbox est bien un chiffre et non du texte.

      Voili Voilou
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        5 mai 2011 à 23:25:14

        Merci de ta réponse !
        Mais comment faire maintenant pour identifier mon contrôle, lui passer des info en récupérer d'autres ?

        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2011 à 9:20:34

          T'entend quoi par "identifier"?

          A chaque contrôle ajouté, tu peux surveiller des évènements. Par exemple, si tu veux faire en sorte que lorsqu'on clique sur l'un des contrôle, ça fait quelque chose, tu as juste à rajouter ceci :
          for(int i=0; i < Convert.ToInt32(tontextbox.Text); i++)
          {
             tonComposant tc = new tonComposant();
             tc.MouseClick += this.UnElementClick;
             tonPanel.Controls.Add();
          }
          
          private void UnElementClick(object sender, EventArgs e)
          {
             tonComposant tonComposantClique = (tonComposant)sender;
             //Faire du code ici, lié au composant cliqué déclaré la ligne du dessus.
          }
          


          Pour l'identification des contrôles, tu dois avoir une propriété Name que tu peux changer. Ensuite, tu peux rechercher un contrôle en partant de son parent avec une méthode type FindName.
          • Partager sur Facebook
          • Partager sur Twitter
            6 mai 2011 à 9:44:46

            Bonjour,

            Si tu veux pouvoir récupérer des infos sur tes contrôles assigne leur un ID unique c'est a dire :
            for(int i=0; i < Convert.ToInt32(tontextbox.Text); i++)
            {
               tonComposant tc = new tonComposant();
               tc.Id = "UnId" + i.toString();
               tonPanel.Controls.Add(tc);
            }
            


            Ensuite pour récupérer un controle particulier :
            foreach(Control c in tonPanel.Controls)
            {
                 if(c.Id =="UnId3")
                 {
                      // Fait ce que tu veux;
                 }
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              6 mai 2011 à 10:09:55

              merci de votre aide.
              Cependant j'ai trouver une autre solution, qui consiste à prendre les contrôles 1 par 1 pour a envoyer mes info dans ma base de donnée :
              Dim ConnectionDB As New SqlConnection
                      ConnectionDB.ConnectionString = "Data Source=" & My.Settings.DataBaseIp & "," & My.Settings.DataBasePort & ";Network Library=DBMSSOCN;Initial Catalog=" & My.Settings.DataBaseName & ";User ID=" & My.Settings.DataBaseUserName & ";Password=" & My.Settings.DataBaseUserPassword & ";"
                      ConnectionDB.Open()
                      Dim nb As Integer = Convert.ToInt32(TextBox4.Text)
                      For i = 1 To nb
                          Dim item As New UserControl1()
                          item = FlowLayoutPanel1.Controls.Item(i - 1)
                          Dim type As Integer
                          Select Case item.Type
                              Case "Administrateur"
                                  type = 1
                              Case "Professeur"
                                  type = 3
                              Case "Elève"
                                  type = 2
                          End Select
                          Dim sqlcommand As New SqlCommand("INSERT INTO UserListe (UserName, UserPassWord, UserType) VALUES ('" & item.UserName & "', '" & item.PassWord & "', '" & type & "')", ConnectionDB)
                          Dim SqlDataset As New DataSet
                          Dim adaptater As New SqlDataAdapter
                          adaptater.SelectCommand = sqlcommand
                          adaptater.Fill(SqlDataset)
                          adaptater.Dispose()
                          sqlcommand.Dispose()
              
                      Next
                      ConnectionDB.Close()
                      Close()
              

              Es ce une bonne méthode ? en tout cas elle marche très bien :)
              • Partager sur Facebook
              • Partager sur Twitter

              Créer des contrôles à la volée - dynamiquement

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown