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

VB 6 et antérieur Discussion :

ajout de control dynamiquement


Sujet :

VB 6 et antérieur

  1. #1
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut ajout de control dynamiquement
    Bonjour ,
    Selon le nombre de champs contenu dans la table de la BD choisie , je désire créer dynamiquement des controls pour tout les champs.. seulement j'ai un petit soucis :s
    Voici une partie de mon 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
    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
     
    For i = 0 To Form1.resu.Fields.Count - 1
     
    Set o = Form1.resu.Fields(i)
    Set c = Form2.Controls.Add("VB.label", "lbl" & Format(i))
    c.FontBold = True
    c.Top = (i * 300) + 50
    c.Left = 100
    c.Height = 250
    c.Caption = o.Name & "(" & typeofField(o) & ")"
    If typeofField(o) = "B" Then
     Set t = Me.Controls.Add("VB.checkBox", o.Name)
    Else: Set t = Me.Controls.Add("VB.TextBox", o.Name)
    End If
     
    t.Visible = True
    t.Top = (i * 300) + 20
    t.Left = 2000
    t.Height = 250
    If (o.Attributes And adFidIsNullable) Then
      t.BackColor = RGB(224, 224, 224)
    End If
     
    If o.Attributes = 16 Then
     t.TabStop = False
     t.Locked = True
     t.BackColor = RGB(32, 224, 224)
    End If
     
    If typeofField(o) = "T" Then
     t.MaxLength = o.DefinedSize
     t.Width = DefinedSize * 1300
    Else
     t.Width = 1000
     
     End If
    On Error GoTo 0
    If typeofField(o) = "N" Or typeofField(o) = "C" Then
    t.Alignment = 1
    Else
    t.Alignment = 0
    End If
     
    Next i
     
    End Sub
    et

    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
     
    Function typeofField(f As ADODB.Field) As String
    Select Case f.Type
    Case adBigInt
      typeofField = "N"
    Case adBoolean
     typeofField = "B"
    Case adCurrency
      typeofField = "C"
    Case adDate, adBDate, adDBTime, adDBTimeStamp
     typeofField = "D"
    Case adGUID
     typeofField = "G"
    Case adLongVarChar
     typeofField = "M"
    Case Else
     typeofField = "T"
     End Select
     
     
    End Function
    Comme résultat , j'obtiens , pour chaque champs , un txtfield vide de 1cm sans labels

    Pourriez-vous m'éclairer svp

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Il y a une rubrique à ce sujet dans la FAQ.

  3. #3
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    merci

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    No hay de que.

    Si ça ne résout pas tout ton problème, tu dis.

  5. #5
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    dans le faq , ils n'expliquent que pour la création d'un control..
    moi j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If typeofField(o) = "B" Then
     Set t = Me.Controls.Add("VB.checkBox", "dynamic"& i)
    Else: Set t = Me.Controls.Add("VB.TextBox", "dyna" & i)
    End If
    si j'ai bien compris , le nom du control que j'ai créé deviens dyna1 par exemple si i vaut 1..
    Lorsque je veux modifier les valeurs de cet élément , comment dois-je y faire référence?
    dans une boucle , faire "dyna"&i.text par exemple , n'est certainement pas bon..
    Et aussi vu que je ne sais pas si ce sera un checkbox ou textbox , je ne peux le déclarer en "dim"

    J'ai réussi à manipuler tout ça mais d'une autre façon , j'essaye de cette façon mais je n'y parviens pas..

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Personnellement je prefere creer un controle d'index 0 et le rendre invisible et ensuite ajouter des controles a ce groupe par code de la maniere suivante, ca me semble plus simple pour y faire reference par la suite, puisque tous tes controles ont le meme nom, seul l'index les differencie.
    Avec un controle Checkbox, nomme CheckTest en mode creation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Command1_Click()
    Dim i As Byte
    i = ChkTest.Count
    Load ChkTest(i)
    ChkTest(i).Visible = True
    ChkTest(i).Left = i * 100
    ChkTest(i).Top = i * 200
    End Sub
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  7. #7
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    moui j'ai eu examen ce matin , j'ai procédé de cette manière , tant pis j'oublie l'autre

    Merci

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

Discussions similaires

  1. Ajouter des controles dynamiquement à un pannel
    Par mimosa803 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 05/05/2009, 20h40
  2. Réponses: 3
    Dernier message: 05/11/2006, 11h42
  3. Réponses: 1
    Dernier message: 19/08/2006, 19h40
  4. Ajout de controls dynamiquement
    Par sunvialley dans le forum IHM
    Réponses: 12
    Dernier message: 12/06/2006, 09h15
  5. [VB.NET] Ajout de controles dynamiquement
    Par A77 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/04/2005, 09h00

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