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.NET Discussion :

Problème d'affichage avec un FlowLayoutPanel !


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut Problème d'affichage avec un FlowLayoutPanel !
    Salut à tous !

    J'ai un petit problème avec une mise en page sur un(e)? FlowLayoutPanel !

    Je m'explique :
    J'ai un logiciel sur lequel je gère l'affichage des contrôles dynamiquement car il n'est pas le même en fonction des données lues dans un fichier.

    Dans mon(ma)? FlowLayoutPanel j'ai TOUJOURS un label avec un texte : "Ajouter une intervention " et un bouton "+" pour ajouter l'intervention.
    Ces 2 contrôles sont l'un à coté de l'autre.

    Si j'ai déjà des interventions présentes dans le fichier, alors avant ces 2 contrôle, (la ligne au dessus donc) j'incorpore une ComboBox avec la liste de mes interventions, ainsi qu'une RixhTextBox qui contiens l'intervention les détails etc de l'intervention que sélectionnera l'utilisateur. Au départ je donne la propriété visible de cette RichTextBox en False !

    Lors d'un choix par l'utilisateur dans cette ComboBox, Choix d'une intervention donc, j'affiche cette intervention dans la RichTextBox et la rend Visible.

    C'est ici mon problème.

    Ma RichTextBox s'affiche TOUJOURS "RichTextBox.Height" plus bas que ma ComboBox.

    Voici 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Public Sub Ouverture_De_Fiche()
     
            LBL_Nom_Entreprise.Text = Nom_Client.Société.Nom
            LBL_Nom_Entreprise.Location = New Point(Me.Width / 2 - LBL_Nom_Entreprise.Width / 2, 24)
     
            FlowLayoutPanel.Add(New FlowLayoutPanel)
     
            Label.Add(New Label)
            Label(Label.Count - 1).Text = "Ajouter une intervention :"
            Label(Label.Count - 1).Width = 125
            Label(Label.Count - 1).Height = 22
            Label(Label.Count - 1).TextAlign = ContentAlignment.BottomCenter
     
            Bouton.Add(New Button)
            Bouton(Bouton.Count - 1).Text = "+"
            Bouton(Bouton.Count - 1).Size = New Size(25, 22)
     
            AddHandler Bouton(Bouton.Count - 1).Click, AddressOf AjouterUneIntervensionToolStripMenuItem_Click
     
            For i As Integer = 0 To Nom_Client.Feuille.Count - 1
     
                With FlowLayoutPanel(FlowLayoutPanel.Count - 1)
                    .FlowDirection = FlowDirection.LeftToRight
                    .Dock = DockStyle.Fill
                    .AutoScroll = True
                    .AutoSizeMode = Windows.Forms.AutoSizeMode.GrowOnly
                End With
     
                TabControl1.TabPages.Add(Nom_Client.Feuille(i).Nom)
                TabControl1.TabPages(TabControl1.TabPages.Count - 1).Controls.Add(FlowLayoutPanel(FlowLayoutPanel.Count - 1))
     
                If Nom_Client.Feuille(i).Interventions.Count > 0 Then
     
                    ComboBox.Add(New ComboBox)
                    RichTextBox.Add(New RichTextBox)
     
                    With ComboBox(ComboBox.Count - 1)
                        .Size = New Size(200, 22)
                        .DropDownStyle = ComboBoxStyle.DropDownList
                    End With
     
                    For j As Integer = 0 To Nom_Client.Feuille(i).Interventions.Count - 1
                        ComboBox(ComboBox.Count - 1).Items.Add("Facture N° " & Nom_Client.Feuille(i).Interventions(j).Num_Facture & ". Le " & Nom_Client.Feuille(i).Interventions(j).Date1)
                    Next
     
                    With RichTextBox(RichTextBox.Count - 1)
                        .BorderStyle = BorderStyle.None
                        .BackColor = Control.DefaultBackColor
                        .Size = New Size(300, 50)
                        .ReadOnly = True
                        .Visible = False
                    End With
     
                    AddHandler RichTextBox(RichTextBox.Count - 1).Click, AddressOf RichTextBox_Click
                    AddHandler ComboBox(ComboBox.Count - 1).SelectedIndexChanged, AddressOf ComboBox_Click
     
                    With FlowLayoutPanel(FlowLayoutPanel.Count - 1)
                        .Controls.Add(ComboBox(ComboBox.Count - 1))
                        .Controls.Add(RichTextBox(RichTextBox.Count - 1))
                        .SetFlowBreak(ComboBox(ComboBox.Count - 1), True)
                        .SetFlowBreak(RichTextBox(RichTextBox.Count - 1), True)
                    End With
     
                End If
     
                With FlowLayoutPanel(FlowLayoutPanel.Count - 1)
                    .Controls.Add(Label(Label.Count - 1))
                    .Controls.Add(Bouton(Bouton.Count - 1))
                End With
     
            Next
     
    End Sub
    Et 2 captures d'écrans :

    Nom : Capture d'écran 2015-06-15 14.37.00.png
Affichages : 738
Taille : 28,1 KoNom : Capture d'écran 2015-06-15 14.37.12.png
Affichages : 655
Taille : 32,2 Ko

    Si je change la Hauteur de ma RichTextBox, alors celle-ci baisse d'autant de pixels dans mon(ma)? FlowLayoutPanel.

    Ca fait un moment que je manipule mon code dans tous les sens avec, sans autosize avec, sans autoscroll bref je patauge dans la semoule...

    Merci par avance !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    margin sur le rtb je pense (vérifier aussi padding sur le flp)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Merci pour votre réponse mais hélas, même problème même combat :

    j'ai ajouté ces 2 lignes :

    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
    With RichTextBox(RichTextBox.Count - 1)
        .BorderStyle = BorderStyle.None
        .BackColor = Control.DefaultBackColor
        .Size = New Size(300, 50)
        .ReadOnly = True
        .Visible = False
        .Margin.All.Equals(0)
    End With
     
    AddHandler RichTextBox(RichTextBox.Count - 1).Click, AddressOf RichTextBox_Click
    AddHandler ComboBox(ComboBox.Count - 1).SelectedIndexChanged, AddressOf ComboBox_Click
     
    With FlowLayoutPanel(FlowLayoutPanel.Count - 1)
        .Controls.Add(ComboBox(ComboBox.Count - 1))
        .Controls.Add(RichTextBox(RichTextBox.Count - 1))
        .SetFlowBreak(ComboBox(ComboBox.Count - 1), True)
        .SetFlowBreak(RichTextBox(RichTextBox.Count - 1), True)
        .Padding.All.Equals(0)
    End With
    Si je ne mets pas mon flp en DockStyle.Fill, (que mon flp est trop petit pour m'afficher les controles en entier et qu'il m'affiche des scrollbar du coups), où si je redimensionne ma form en plus petit (voir Screenshots en dessous), la richtextbox ce place correctement en dessous de ma combobox.

    Je n'y comprends que dalle ...

    Nom : Capture d'écran 2015-06-17 08.41.43.png
Affichages : 668
Taille : 73,8 KoNom : Capture d'écran 2015-06-17 08.41.50.png
Affichages : 634
Taille : 101,9 Ko

    Nom : Capture d'écran 2015-06-17 08.47.56.png
Affichages : 605
Taille : 18,6 KoNom : Capture d'écran 2015-06-17 08.48.05.png
Affichages : 592
Taille : 21,5 Ko

    Preuves à l'appuis !

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par Jeano81 Voir le message
    .Margin.All.Equals(0)
    à ma connaissance cette commande n'a jamais défini les marges

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Margin = new padding(0)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Ah je ne savais pas ! Merci.

    Mais le problème reste le même ! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With FlowLayoutPanel(FlowLayoutPanel.Count - 1)
        .Controls.Add(ComboBox(ComboBox.Count - 1))
        .Controls.Add(RichTextBox(RichTextBox.Count - 1))
        .SetFlowBreak(ComboBox(ComboBox.Count - 1), True)
        .SetFlowBreak(RichTextBox(RichTextBox.Count - 1), True)
        '.Margin = New Padding(0)'.Padding = New Padding(0)
    End With
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With RichTextBox(RichTextBox.Count - 1)
        .BorderStyle = BorderStyle.None
        .BackColor = Control.DefaultBackColor
        .Size = New Size(300, 50)
        .ReadOnly = True
        .Visible = False
        .Margin = New Padding(0)
    End With

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    As-tu essayé de mettre pour le combobox ET le Richtextbox, leur "Dock = Top" ?
    Sans toucher à Anchor...

    Sinon moi je suis plus fan du TableLayoutPanel, avec une cellule = 1 control à Dock=Fill, et tu gères la taille des lignes ou cellules du TLP.

    Tu peux ajouter dynamiquement des lignes ou des colonnes en faisant : TableLayoutPanel.GrowStyle.AddRow.
    PAr contre pour faire ce que tu ferais, il faudrait mettre un premier TLP avec deux lignes 1 colonnes, la ligne du dessous pour "ajouter une intervention"
    Et dans la ligne du dessus tu mets un autre TLP, celui là tu lui fera des AddRows pour un comboboc pui sun autre pour ajouter le richtextbox...

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Oui j'y avais pensé mais c'est un peut plus lourd à traiter (de pas grand choses certes, c'est pour ça que je voudrais trouver ce qui déconne dans le FLP ou RTB pour éviter d'avoir à rajouter ces lignes !

    Mais si il y à pas de solutions je serai forcé d'y passer au TLP :/.

    PS : avec Dock = Top c'est pareil...

  8. #8
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Ce ne serait pas ton .SetFlowBreak qui mets l'espace, tout simplement ?
    Essai sans...

  9. #9
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    sans le flowbreak, la richtextbox est en suivant après la combobox et non pas en dessous ! C'est pas le but ^^

  10. #10
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2013
    Messages : 57
    Par défaut
    essaye de glisser un RichTextBox(RichTextBox.Count - 1).Anchor = Top

    Sinon tu peut disposer toi-même tes controls dans un Panel normal (éventuellement avec ta propre fonction). Tu utiliserais deux variables Integer nommées 'Colonne' et 'Ligne' avec une valeur de départ de 0 : Dans une boucle te donnant les controls qui sont dans ton panel un par un tu aurais à faire dans cet ordre, avec 'ControlEnCour' étant le control actuellement traité :
    -> Tester si la valeur de Ligne + ControlEnCour.height est plus grande que la hauteur du panel, et si c'est le cas, faire Ligne=0 et Colonne = Colonne + La_Largeur_des_controls afin que les controls ne dépassent pas en bas du formulaire
    -> ControlEnCour.top=Ligne et ControlEnCour.Left = Colonne pour placer tes controls au bon endroit
    -> Ligne = Ligne + ControlEnCour.height pour éviter que les controls ne se superposent
    -> Ligne = ligne + 10 pour espacer un peu tout ça

  11. #11
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Je suis pas sur pour le flowbreak... Il me semble que ajouter tout simplement va le mettre à la ligne en dessous, de ce que j'ai lu sur internet...
    Le flowbreak c'est pour marqué un espace justement...

    Mais si je me trompe et que ce n'est qu'une histoire de disposition, ceci devrait aider :

    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    setflowbreak sert à aller à la ligne (en cas de direction horizontale) ou aller à la colonne suivante (en cas de direction verticale)
    (alors que normalement il attend d'être à la fin de la ligne/colonne pour passer à la suivante)
    il ne génère pas spécialement d'espace

    ce qui est sur c'est que ca vient du richtextbox, aucun autre controle n'a ce comportement
    il me semble avoir déjà vu ce problème et que quelqu'un avait trouvé une solution (peut etre en bricolant par contre) ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut
    salut si c est un probleme de placement c comme utiliser drag drop
    je le fait avec des picturebox

    donc
    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
     
    Private dragcursor As Cursor, dragtype As Type
     
    Private Sub FlowLayoutPanelRecherche_DragEnter(sender As Object, e As DragEventArgs) Handles FlowLayoutPanelRecherche.DragEnter
            If e.AllowedEffect = DragDropEffects.Move AndAlso e.Data.GetDataPresent(dragtype) Then
                e.Effect = DragDropEffects.Move
            End If
     
        End Sub
     
        Private Sub FlowLayoutPanelRecherche_GiveFeedback(sender As Object, e As GiveFeedbackEventArgs) Handles FlowLayoutPanelRecherche.GiveFeedback
            e.UseDefaultCursors = False
            Cursor.Current = Me.dragcursor
     
        End Sub
     
     
        Private Sub FlowLayoutPanelRecherche_DragDrop(sender As Object, e As DragEventArgs) Handles FlowLayoutPanelRecherche.DragDrop
            Dim source As Control = CType(e.Data.GetData(dragtype), Control)
            Dim target As Control = Me.FlowLayoutPanelRecherche.GetChildAtPoint(Me.FlowLayoutPanelRecherche.PointToClient(New Point(e.X, e.Y)))
            If target IsNot Nothing Then
                Dim ix As Integer = Me.FlowLayoutPanelRecherche.Controls.GetChildIndex(target)
                Me.FlowLayoutPanelRecherche.Controls.SetChildIndex(source, ix)
            End If
     
        End Sub
    Dans mon add Contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    dim p as new picturebox
     AddHandler p.MouseDown, AddressOf childs_MouseDown

Discussions similaires

  1. Problème d'affichage avec IE
    Par sheepk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/11/2005, 13h00
  2. Réponses: 6
    Dernier message: 19/05/2005, 11h06
  3. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 18h30
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

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