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

IHM Discussion :

affecter une source à des controles créés dynamiquement


Sujet :

IHM

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut affecter une source à des controles créés dynamiquement
    bonjour,

    voilà quelques jours que je cherche à réaliser dynamiquement un "arbre" du style "cause/conséquence" à l'aide de TextBox avec des données provenant d'une requête.
    Je suis depuis hier ,grâce à pleins d'idées trouvées sur ce même forum, presque arrivé à mes fins...
    Seulement je n'arrive pas à définir dynamiquement les valeurs de mes TextBox.

    Je procède comme suit:
    Je choisi une FAUTE dans une liste déroulante (cmbFAUTE) sur un formulaire, ensuite je clique sur le bouton Btn.
    Cela ouvre le Formulaire FormA (déjà existant mais vide) en mode création et crée des controles suivant les données parcourues par le recordset.

    Je vous soumet deux codes qui fonctionnent partiellement correctement:

    Le premier m'affiche correctement les TextBox sur sur fomulaire, mais je n'arrive pas à affecter les sources aux contrôles.
    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
    47
    48
    49
    Private Sub Btn_Click()
    Dim Db As DAO.Database
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    Dim i, j, k As Integer
    Dim Controle As Control
     
    Set Db = CurrentDb()
     
    'Ouvrir le formulaire en mode création
    DoCmd.OpenForm " FrmA", acDesign
     
    Set rst1 = Db.OpenRecordset("SELECT DISTINCT [CAUSE] FROM qryCauseConsequence WHERE FAUTE= '" & Me.cmbFAUTE & "'")
    i = 1
    k = 1
    While Not rst1.EOF
    'Créer le contrôle i
    Set Controle = CreateControl("FrmA", acTextBox)
    With Controle
    'lui affecter un nom
    .Name = "txt_ CAUSE " & i
    'le positionner sur le formulaire
    .Left = 2000
    .Top = 100 + j
    End With
    Set rst2 = Db.OpenRecordset("SELECT [CONSEQUENCE] FROM qryCauseConsequence WHERE [CAUSE]= '" & rst1("CAUSE") & "'")
    While Not rst2.EOF
    'Créer le contrôle k
    Set Controle = CreateControl("FrmA ", acTextBox)
    With Controle
    'lui affecter un nom
    .Name = "txt_ CONSEQUENCE " & k
    'le positionner sur le formulaire
    .Left = 4000
    .Top = 100 + j
    End With
    j = j + 520
    rst2.MoveNext
    k = k + 1
    Wend
    rst2.Close
    rst1.MoveNext
    i = i + 1
    Wend
    rst1.Close
    Set rst1 = Nothing
    Set rst2 = Nothing
    Set Db = Nothing
    End Sub
    Le second code, m'affiche une TextBox par colonne (CAUSE et CONSEQUENCE) de ma requête et je vois bien les valeurs, mais je dois passer d'un enregistrement à l'autre car il n'y a qu'un enristrement par "page"... alors que je souhaite avoir toutes les données sur le même "visuel" afin d'obtenir ma structure en "arbre"
    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
    47
    Private Sub Btn_Click()
    Dim Db As DAO.Database
    Dim rst1, rst2 As DAO.Recordset
    Dim i, j, k As Integer
     
    Set Db = CurrentDb()
     
    'Ouvrir le formulaire en mode création
    DoCmd.OpenForm "FrmA", acDesign
     
    Set rst1 = Db.OpenRecordset("SELECT DISTINCT [CAUSE] FROM qryCauseConsequence WHERE FAUTE= '" & Me.cmbFAUTE & "'")
    Dim Controle(0 To 100) As Control
     
    i = 1, k = 1, j = 1000
    While i <= rst1.Fields.Count
    'Créer le contrôle i
    Set Controle(i) = CreateControl("FrmA", acTextBox)
    With Controle(i)
    .Name = "txt_ CAUSE" & i
    .Left = 2000
    .Top = 100 + j
    .ControlSource = rst1.Fields(i - 1).Name
    End With
    Set rst2 = Db.OpenRecordset("SELECT [CONSEQUENCE] FROM qryCauseConsequence WHERE [CAUSE]= '" & rst1("CAUSE") & "'")
    While k < rst2.Fields.Count
    'Créer le contrôle k
    Set Controle(k) = CreateControl("FrmA", acTextBox)
    With Controle(k)
    .Name = "txt_ CONSEQUENCE" & k
    .Left = 4000
    .Top = 100 + j
    .ControlSource = rst1.Fields(k - 1).Name
    End With
    j = j + 520
    rst2.MoveNext
    k = k + 1
    Wend
    rst2.Close
    rst1.MoveNext
    i = i + 1
    Wend
     
    rst1.Close
    Set rst1 = Nothing
    Set rst2 = Nothing
    Set Db = Nothing
    End Sub
    J'aimerais savoir comment affecter une source dynamiquement à chaque contrôle en utilisant le premier code.
    En gros comment dire que txt_CAUSEi= valeur i de la colonne CAUSE et idem pour txt_CONSEQUENCE= valeur k de la colonne CONSEQUENCE.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: affecter une source à des controles créés dynamiquement
    Bonojur,

    Citation Envoyé par LeScandinave
    Le premier m'affiche correctement les TextBox sur sur fomulaire, mais je n'arrive pas à affecter les sources aux contrôles.
    Tu peux utiliser la propriété ControlSource des contrôles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controle.ControlSource = "='" & rst1!CAUSE & "'"
    =JBO=

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je pense sincèrement que la création de controles de manière dynamique est une solution à éviter. Access n'est pas fait pour cela, désolé.

    Pour les arbres, il existe les treeview qui eux sont vraiment trés bien.

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par Tofalu
    Je pense sincèrement que la création de controles de manière dynamique est une solution à éviter. Access n'est pas fait pour cela, désolé.
    Hm hm ...

    on peut très bien affecter dynamiquement des sources à des contrôles eux-memes créés dynamiquement.

    C'est d'ailleurs un des points intéressants (à mon avis) de mon tutoriel sur les formulaires pseudo-continus (lien dans ma signature).

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    on peut très bien affecter dynamiquement des sources à des contrôles eux-memes créés dynamiquement.
    Je ne remet pas en cause l'assignation de la sources aux controles,

    je remet plutot en cause la création dynamique des controles.

    Je pense que cela devient vite une usine à gaz et plutot incompatible avec le runtime

    Mais bon, chacun son point de vue

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Je te rejoins néanmoins sur le fait que cette technique ne doit pas pallier à un problème de conception, et qu'elle est incompatible avec le Runtime

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    ne doit pas pallier à un problème de conception,
    Ah quelle sagesse,

    c'est justement LA raison pour laquelle je déconseille la création de controle dynamique. En effet à 99,9 % des cas, cela révele une erreur de conception. Traitement de ligne en colonne pour la plupart des cas.

    Bien sûr il y a les cas "pour aller plus loin" * , où l'on sort de l'utilisation standard d'access, et là, obligé de constater que parfois ce serait bien utile de pouvoir créer des controles comme en VB (groupe de controles), mais cela devient vite trop lourd, inmaintenable, à moins d'être sur que les besoins ne varieront pas


    * http://access.developpez.com/cours/ , ton tutoriel figure à juste titre dans la partie Aller plus loin

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    Dans l'ordre:

    Merci JBO, c'est noté et je vais tester cela mercredi de bonne heure

    Merci de tes mises en garde Tofalu , je les avais lus sur d'autres post, mais en effet comme tu le dis dans la suite, il y a des cas où il faut aller plus loin et où la mise en page nécessite un minimum de design...
    Malheureusement ce que je veux faire sous Access se doit d'être lisible très facilement, et surtout utilisable avec des données dont le nombre de données n'est pas connu par avance.

    Merci Caféine, je vais me replonger dans tes tutoriels.

    Promis, je posterai dès mercredi en détails mon objectif et le pourquoi du comment. Car s'il existe un autre moyen, pourquoi pas , je suis là pour apprendre toujours de nouvelles astuces et accumuler les remarques de personnes plus expérimentées que moi.

    Je précise que ma base de données, même si elle se trouve sur un réseau et peut-être lue (et non modifiée) par plusieurs utilisateurs, ne sera pas utilisée avec Runtime (mais merci de l'info, ça m'évitera des mésaventures)


    PS:
    Il y a peu de temps que je m'interresse aux contrôles créés dynamiquement et losque que j'ai vu ce que l'on peut faire avec, je me suis même demander pour le fun (c'est un autre projet que celui d'au dessus), même si ce n'est pas le but d'Access, si l'on pouver créer de presque A à Z une base de données dynamiquement en stockant les codes utilisables dans une table dédiée et ordonnée de façon structurée.

    Le Scandinave.

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    Donc JBO, merci à toi j'ai pu affecter une source dynamiquement à mes contrôles.

    En effet Tofalu, ma structure va être lourde car je suis en train de me faire "artisanalement" mon Treeview.
    Donc je suis en train de me renseigner sur des Treeview "qui ont de l'allure" pour comparer et avec plusieurs possibilités.
    Mais bon j'ai déjà réussi à me faire un "treeview" de 3 niveaux, il ne me reste plus qu'à imbriquer 2 autres niveaux et j'aurais ce que je souhaite.

    Il ne me reste plus qu'à voir si cela fonctionne aussi vite qu'un Treeview (là un doute énorme m'empare )

  10. #10
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 158
    Points : 163
    Points
    163
    Par défaut
    la suite et le résultat de ce post ce trouve
    Bonne lecture.

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

Discussions similaires

  1. Utiliser des controls créés dynamiquement
    Par abonnefoy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/11/2010, 21h56
  2. Réponses: 6
    Dernier message: 28/10/2010, 11h43
  3. Réponses: 2
    Dernier message: 27/10/2008, 13h50
  4. une page jsp avec des controles graphique dynamiques
    Par capello123 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/12/2007, 16h37
  5. Affectation de macros à des boutons créés dynamiquement
    Par JM_Cholet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/07/2007, 14h09

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