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 :

Retrouver les index de contrôles insérés dynamiquement


Sujet :

VB 6 et antérieur

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut Retrouver les index de contrôles insérés dynamiquement
    Bonjour à tous

    Je viens a vous avec un problème qui me semblais tout simple, et pour tant.
    Il m'avais semblé voir un poste sur le sujet dans le forum, mais je ne l'ais pas retrouvé.
    Dans une appli, j'inserts dynamiquement des contrôles par l'intermédiaire d'une form de saisie.
    Je place une frame (Fr_T) avec un titre (Titre_Lg). dans la frame j'inserts des Images (Image) et des Textes (text_Image).
    Ma form peut contenir plusieurs frame différencier par leur index. Chaque frame peut contenir 1 à plusieurs images et textes différencier par leur index.
    Jusque la rien d'extraordinaire.

    Le problème ais de pouvoir retrouver le plus petit et le plus grand index d'une frame.

    J'ais bien essayé .Lbound et .Ubound, mais sans succès. J'ais essayé d'utiliser .Container mais la aussi sans succès.
    J'ais pensée renommer mes contrôles à l'insertion mais cela me pose un problème pour la suite de mon appli. (Traitement de tout les contrôles)

    Voici le code qui me sert a insérer mes 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
    50
    51
    52
    53
    54
    55
    56
    57
    Dim Str_P1, Str_P2 As Long
     
            Nb2 = F_0.Fr_T.UBound + 1
            Nb1 = F_0.Image.UBound + 1
            Load F_0.Fr_ T (Nb2)
            If Ch_Lg(1).Value = 1 Then
                Load F_0.Titre_Lg(Nb2)
            End If
            F_0.Fr_ T (Nb2).Visible = True
            If Ch_Lg(1).Value = 1 Then
                F_0.Titre_Lg(Nb2).Visible = True
            End If
            F_0.Fr_ T (Nb2).Top = F_0.Fr_ T (Nb2 - 1).Top + F_0.Fr_ T (Nb2 - 1).Height + 100
            If Ch_Lg(1).Value = 1 Then
                F_0.Titre_Lg(Nb2).Top = F_0.Fr_ T (Nb2).Top - F_0.Titre_Lg(Nb2).Height - 50
                F_0.Titre_Lg(Nb2).Width = F_0.Fr_ T (Nb2).Width
            End If
     
            Str_P1 = ((F_0.Fr_ T (Nb2).Width - (Text_Lg(0).Text * (Replace(Text_Lg(2).Text, ".", ",") * 512))) / Text_Lg(0).Text)
            Str_P2 = ((F_0.Fr_ T (Nb2).Width - (Text_Lg(0).Text * (Replace(Text_Lg(2).Text, ".", ",") * 512))) / 2)
     
            For LL = Nb1 To (Nb1 + Text_Lg(0) - 1)
                Load F_0. Image (LL)
                Load F_0.Text_ Image (LL)
     
                F_0. Image (LL).Visible = True
                F_0.Text_ Image (LL).Visible = True
     
                Set F_0. Image (LL).Container = F_0.Fr_ T (Nb2)
                Set F_0.Text_ Image (LL).Container = F_0.Fr_ T (Nb2)
                F_0. Image (LL).Height = Round(Replace(Text_Lg(1).Text, ".", ",") * 512, 1)
                F_0. Image (LL).Width = Round(Replace(Text_Lg(2).Text, ".", ",") * 512, 1)
     
                F_0. Image (LL).Top = 150
     
                If Ch_Lg(0).Value = 0 Then
                    If LL = Nb1 Then
                        F_0. Image (LL).Left = Str_P1 / 2
                    Else
                        F_0. Image (LL).Left = F_0. Image (LL - 1).Left + F_0. Image (LL - 1).Width + Str_P1
                    End If
                End If
     
                If Ch_Lg(0).Value = 1 Then
                    If LL = Nb1 Then
                        F_0. Image (LL).Left = Str_P2
                    Else
                        F_0. Image (LL).Left = F_0. Image (LL - 1).Left + F_0. Image (LL - 1).Width
                    End If
                End If
     
                F_0.Text_ Image (LL).Top = F_0. Image (LL).Top + F_0. Image (LL).Height + 5
                F_0.Text_ Image (LL).Left = F_0. Image (LL).Left
                F_0.Text_ Image (LL).Width = F_0. Image (LL).Width
                F_0.Text_ Image (LL) = LL
                F_0.Fr_ T (Nb2).Height = F_0. Image (LL).Height + F_0.Text_ Image (LL).Height + 200
            Next
    Vous remerciant par avance de votre aide,

    BM42

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Je ne comprends pas...

    Je viens de faire sans problème ce petit test avec 2 forms Form1 et Form2 avec au départ, sur chacune d'elles, un label label1(0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Command1_Click()
      Dim i As Integer
     For i = Form1.Label1.ubound + 1 To 3
       Load Form1.Label1(i)
     Next
     For i = Form2.Label1.ubound + 1 To 3
       Load Form2.Label1(i)
     Next
     MsgBox Form1.Label1.ubound
     MsgBox Form2.Label1.ubound
    End Sub
    Quelque chose m'a échappé, dans ton exposé du problème ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    salut Ucfoutu

    Désolé je n'ais pas été bien clair

    Je recherche les index des controles placé de la frame1(X) en sachant que je peut avoir une frame1(0) + frame1(1) + ... dans la même form.
    Les controles placés dans les frames sont Image(0), image(1), ...
    Le problème est que je ne sais pas combien d'image vont être insérées dans la frame et combien de frame je vais avoir sur la form.

    le Lbound me donne l'index de ma 1er Image de la première frame
    le Ubound me donne l'index de la derniere Image de ma dernière Frame

    A+

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Pardonne-moi (je suis peut-être mal réveillé).

    Le Ubound ne considère que le nom donné à un contrôle et son index, sans tenir compte du conteneur dans lequel il se trouve !

    Que cherches-tu donc précisément ?
    voudrais-tu dire que tu as des contrôles image1(x) dans un container C1 d'une Form et des contrôles image1(y) sur la même Form mais pas dans le même container et que tu souhaiterais déterminer l'index le plus élevé des contrôles image1(x) contenus dans le container C1 ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    tu est tout pardonné car il est vraix que mes explications sont un peut confuses mais j'ais essayé de fair cours.

    ceci étant dit tu as tout compris, mais, parce qu'il y a toujour un mais, j'ais en réalité plusieurs conteneurs c1 qui contiennent plusieurs Image.
    Le but est de connaitre les index des images d'un seul conteneur.

    edit : En réalité il n'y a pas de Mais ... tu as très bien compris
    (Je crois que c'est moi qui planne)

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Alors voilà (il te faut tout boucler et ne garder que le plus grand d'un container.

    Ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim plusgrand As Integer
     plusgrand = 0
     For i = 0 To Form2.Label1.UBound
       If Form2.Label1(i).Container Is Form2.Frame2 Then
         plusgrand = i
       End If
     Next
     MsgBox plusgrand
    End Sub
    Recapitulons (avec exemple) : celà sera plus facile à comprendre ainsi :

    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
    Private Sub Command1_Click()
      Dim i As Integer
     For i = Form1.Label1.UBound + 1 To 5
       Load Form1.Label1(i)
     Next
     For i = Form2.Label1.UBound + 1 To 5
       Load Form2.Label1(i)
       If i = 2 Or i = 3 Then ' donc 3 sera mon plus grand dans Frame2 
        Set Form2.Label1(i).Container = Form2.Frame2
       End If
     Next
     Dim plusgrand As Integer
     plusgrand = 0
     For i = 0 To Form2.Label1.UBound
       If Form2.Label1(i).Container Is Form2.Frame2 Then
         plusgrand = i
       End If
     Next
     MsgBox plusgrand
    End Sub

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Merci pour l'info

    Je vais essayer se soir. (je n'ais pas le prog sous la main.)

    A+

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Re

    J'ais testé avec succès !!!

    Encors a toi Ucfoutu.

    A+

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

Discussions similaires

  1. [Débutant] Problème pour retrouver les index des contrôles ajoutés dynamiquement
    Par BasicZX81 dans le forum VB.NET
    Réponses: 10
    Dernier message: 04/09/2012, 22h03
  2. Réponses: 1
    Dernier message: 30/07/2009, 15h23
  3. [10g]Retrouver les Index Failed
    Par lunab54 dans le forum Administration
    Réponses: 3
    Dernier message: 12/05/2009, 18h29
  4. Gerer les evenements de Contrôles créés dynamiquement
    Par celineSGH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2008, 02h25
  5. Changer les index de controles insérés dynamiquement
    Par BM42 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/10/2007, 14h49

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