Deplacement dans une listbox

Lordanus Messages postés 11 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 1 décembre 2006 - 1 déc. 2006 à 22:19
TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 - 1 déc. 2006 à 23:59
Bonjour,
Mon problème est le suivant

j'ai une listbox qui posséde une certaine taille (hauteur et largeur)

Lorsque je rentre des données successive dans cette derniere au bout d'un certain nb de ligne il apparait une barre de defilement en hauteur.

Mon pb est que si je posséde une ligne trop longue je n'ai pas de barre de filement pour me deplacer de gauche a droite.

Comment puis je obtenir cette derniere ou dire a ma listbox de retourner a la ligne lorsque le texte arrive en fin de fenetre.

Merci

4 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 22:29
Mets ta listbox dans un cadre, donne-lui une largeur énorme et utilise une scrollbar pour déplacer ta listbox dans le cadre.

Tout celà est facile.

Cherche un peu d'abord et nous ne viendrons à ton secours que si tu n'en es vraiment pas capable...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 déc. 2006 à 22:49
Bon...
Je dois aller dormir...
Alors voilà :

ta listbox list1 dans un Frame Frame1. Donne à la propriété Width de ta list1 une valeur bien plus importante que nécessaire et donne à ton Frame1 une valeur Wodth compatible avec ce que tu veux à l'affichage (donc bien plus petite que List1.Width
en bas (ou en haut, comme tu veux) de ton Frame1 : une Hscrollbar Hscroll1

code :

Private Sub Form_Activate()
   With HScroll1
     .Max = List1.Width
     .SmallChange = 10
     .Value = 0
     .Width = Frame1.Width
     .Height = 315
   End With
   List1.Move 0, 0
   Frame1.BorderStyle = 0
End Sub


Private Sub HScroll1_Change()
   List1.Left = -HScroll1.Value
End Sub


Private Sub HScroll1_Scroll()
   HScroll1_Change
End Sub

Je n'aime généralement pas servir du tout cuit, mais tu as de la chance (j'ai sommeil)


 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 déc. 2006 à 23:57
Tu peux aussi y arriver en passant par l'API SendMessage

À déclarer dans un module (ou en Private dans une feuille):
Option Explicit

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As Long

Public Const LB_SETHORIZONTALEXTENT = &H194

Public Sub AddScroll(List As ListBox)
    Dim I As Integer, intGreatestLen As Integer, lngGreatestWidth As Long
   
    'Trouver la plus longue chaîne de caractères de la listbox
    For I = 0 To List.ListCount - 1
        If Len(List.List(I)) > Len(List.List(intGreatestLen)) Then
            intGreatestLen = I
        End If
    Next I

    'Space(1) est utilisé pour empêcher le dernier caractère d'être coupé
    lngGreatestWidth = List.Parent.TextWidth(List.List(intGreatestLen) + Space(1))
   
    'Convertir en Pixels
    lngGreatestWidth = lngGreatestWidth \ Screen.TwipsPerPixelX

    'Utiliser SendMessage pour ajouter la ScrollBar
    SendMessage List.hwnd, LB_SETHORIZONTALEXTENT, lngGreatestWidth, 0

End Sub

Pour afficher la barre, une fois la listbox remplie
AddScroll List1  ' en supposant que "List1" est le nom du contrôle Listbox

MPi
0
TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 1
1 déc. 2006 à 23:59
Bonsoir,

Une listbox sert en général à afficher des valeurs courtes, liste de noms, de chiffres...
SI tu veux y mettre une valeur trés longue, c'est qu'il y a au départ une erreur d'analyse ou le choix du control rdt inadéquat.

Mieux vaux avoir une liste d'identifiants ou de noms dans la listbox  et afficher dans une textbox multiligne au dessous le texte long associé (en utilisant le onclick de la listbox par exemple) . L'utilisation de la barre système en pied de form est aussi une solution possible.

Jcbé[^]
0
Rejoignez-nous