begin process at 2012 02 11 10:19:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > LISTBOX MULTI COLONNES

LISTBOX MULTI COLONNES


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Niveau :Débutant Date de création :25/04/2005 Vu / téléchargé :19 420 / 1 582

Auteur : ORTIPIC

Ecrire un message privé
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
une petite routine pour gerer le multi colonnes d un listbox  et  la roulette fonctionne aussi

Source

  • exemple avec 5 listbox list1(0),list1(1),.............
  • j ai mis les listbox a cheval pour cacher les barres de scroll en trop
  • voila le code-------------------------------------------------------------------------------------------------------------
  • '---------------------------la routine est dans un timer------------------------------------
  • 'le list1(0).tag est a -00002-00002 dans les proprietés
  • '-------------------------- ne gere pas le multi liste selection pour le moment-----------------------
  • '--------------------------remplir les listes----------200 lignes /5 colonnes---------------
  • Private Sub Form_Load()
  • For t = 0 To 200
  • For a = 0 To 4
  • List1(a).AddItem Str(t) + Str(a) + "<<=="
  • Next
  • Next
  • '--------------------------------------------------------------------------------------------
  • Timer1.Interval = 100 '<<== ----si comme moi la roulette ne fonctionne pas bien dans en scrolling alors ceci est ma solution--------------------------
  • End Sub
  • Private Sub List1_Click(Index As Integer)
  • Call Timer1_Timer 'lier les listes
  • End Sub
  • Private Sub List1_Scroll(Index As Integer)
  • Call Timer1_Timer 'lier les listes
  • End Sub
  • Private Sub List1_Validate(Index As Integer, Cancel As Boolean)
  • Call Timer1_Timer 'lier les listes
  • End Sub
  • Private Sub Timer1_Timer()
  • 'routine --lier les listes--
  • 'nombre de colonnes-1
  • nc = 4
  • '------------------lecture variables---------------------------------------------------
  • K_li = Val(Left(List1(0).Tag, 6))
  • K_to = Val(Right(List1(0).Tag, 6))
  • '------------------valeur listindex <> des autres --------------------------------------
  • er = 0
  • For t = 0 To nc
  • If List1(t).ListIndex <> K_li And List1(t).ListIndex <> -1 Then
  • K_li = List1(t).ListIndex
  • er = 1: Exit For
  • End If
  • Next
  • '-------------------si <> il y a retablir les autres-------------------------------------
  • If er = 1 Then
  • For t = 0 To nc
  • List1(t).ListIndex = K_li
  • Next
  • End If
  • '-------------------valeur topindex <> des autres----------------------------------------
  • er = 0
  • For t = 0 To nc
  • If List1(t).TopIndex <> K_to Then
  • K_to = List1(t).TopIndex
  • er = 1: Exit For
  • End If
  • Next
  • '-------------------si <> il y a retablir les autres-------------------------------------
  • If er = 1 Then
  • For t = 0 To nc
  • List1(t).TopIndex = K_to
  • Next
  • End If
  • '-------------------si une active la selection (list1(0) maitre)-------------------------
  • If K_li >= 0 Then
  • For t = 1 To nc
  • List1(t).Selected(K_li) = List1(0).Selected(K_li)
  • Next
  • End If
  • '-------------------sauvegarde les variables----------------------------------------------
  • List1(0).Tag = Format(K_li, "+0####")
  • List1(0).Tag = List1(0).Tag & Format(K_to, "+0####")
  • DoEvents
  • End Sub
exemple avec 5 listbox list1(0),list1(1),.............

j ai mis les listbox a cheval pour cacher les barres de scroll  en trop

 voila le code-------------------------------------------------------------------------------------------------------------


'---------------------------la routine est dans un timer------------------------------------
'le list1(0).tag est a -00002-00002 dans les proprietés
'-------------------------- ne gere pas le multi liste selection  pour le moment-----------------------

'--------------------------remplir les listes----------200 lignes /5 colonnes---------------
Private Sub Form_Load()

For t = 0 To 200
For a = 0 To 4
List1(a).AddItem Str(t) + Str(a) + "<<=="
Next
Next

'--------------------------------------------------------------------------------------------
Timer1.Interval = 100 '<<==  ----si comme moi la roulette ne fonctionne pas bien dans en scrolling alors ceci est ma solution--------------------------

End Sub

Private Sub List1_Click(Index As Integer)
Call Timer1_Timer 'lier les listes
End Sub


Private Sub List1_Scroll(Index As Integer)
Call Timer1_Timer 'lier les listes
End Sub

Private Sub List1_Validate(Index As Integer, Cancel As Boolean)
Call Timer1_Timer 'lier les listes
End Sub


Private Sub Timer1_Timer()
'routine --lier les listes--
'nombre de colonnes-1
nc = 4
'------------------lecture variables---------------------------------------------------
K_li = Val(Left(List1(0).Tag, 6))
K_to = Val(Right(List1(0).Tag, 6))
'------------------valeur listindex <> des autres --------------------------------------
er = 0
For t = 0 To nc
If List1(t).ListIndex <> K_li And List1(t).ListIndex <> -1 Then
K_li = List1(t).ListIndex
er = 1: Exit For
End If
Next
'-------------------si <> il y a retablir les autres-------------------------------------
If er = 1 Then
For t = 0 To nc
 List1(t).ListIndex = K_li
Next
End If
'-------------------valeur topindex <> des autres----------------------------------------
er = 0
For t = 0 To nc
If List1(t).TopIndex <> K_to Then
K_to = List1(t).TopIndex
er = 1: Exit For
End If
Next
'-------------------si <> il y a retablir les autres-------------------------------------
If er = 1 Then
For t = 0 To nc
 List1(t).TopIndex = K_to
Next
End If
'-------------------si une active la selection (list1(0) maitre)-------------------------
If K_li >= 0 Then
For t = 1 To nc
 List1(t).Selected(K_li) = List1(0).Selected(K_li)
Next
End If
'-------------------sauvegarde les variables----------------------------------------------
List1(0).Tag = Format(K_li, "+0####")
List1(0).Tag = List1(0).Tag & Format(K_to, "+0####")

DoEvents
End Sub


 Conclusion

le zip donne un bon exemple

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture VISION DES HANDLES WINDOWS
Source avec Zip LIS 2 PREMIUM AFFICHER DU TEXTE SUR LCD A.F.C
Source avec Zip GENERATEUR DE CIRCUITS SCALEXTRIC
Source avec Zip DIALOGUES ENTRES APPLICATIONS
Source avec Zip PLUSIEURS COMMAND-LINE POUR UN SEUL EXECUTABLE

 Sources de la même categorie

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture DÉPLACEMENT AVEC FLÈCHES DANS UN PAVÉ DE TEXTBOX 9X9 DYNAMIQ... par EhJoe
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLSTARS EN RÉPONSE À JAKNIGHT007 par bigboss9
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER ANNUEL NORME ISO par Prog1001
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLE STARS par jaknight007

Commentaires et avis

Commentaire de PROGRAMMIX le 25/04/2005 16:51:34

Si tu veux faire du multi-colonnes avec un seul listbox, je te propose d'aller jeter un oeil à cette adresse : http://www.vbfrance.com/code.aspx?id=26686.

J'y ai déposé une source synthétisant plusieurs possibilités d'utilisation de l'API sendmessage avec un listbox ou un combobox.  Tu y découvriras la manière de réaliser du multi-colonnes à la manière d'Access.

Bonne continuation.

Commentaire de ScSami le 25/04/2005 20:44:10

Bon, j'ai pas téléchargé la source mais selon ce que j'ai compris tu utilises plusieurs ListBox !!!!

Je n'ai qu'une question :
N'est-ce pas aberrant lorsqu'il existe les ListView ??????

Bonne prog.

Commentaire de NoFutur le 26/04/2005 18:51:29

Salut,

Je vais répondre à la question de ScSami :
Pour ceux qui ne veulent pas s'encombrer d'un ocx supplémentaire et qui ne sont pas trop exigeant ma fois ça peut toujours convenir qui sait :-)

@++

Commentaire de BADGE le 15/07/2005 20:46:09

Je trouve que le scroll "lag" trop à mon goût. Je dois avouer que j'ai déjà penser à cette solution, mais elle n'est pas esthétique. De plus, il n'est pas facilement transportable d'un projet à l'autre. Je préfère le ListView! Par contre, je n'ai pas trouvé comment changé l'ordre de tri en cliquant sur les en-têtes (headers) des colonnes.

Commentaire de NoFutur le 16/07/2005 10:56:49

Badge,

Si tu cherche à classer des infos dans une ListView va dans la sub "List1_ColumnClick" du controle ListView et copie ce bout de code : List1.SortKey = ColumnHeader.Index - 1 (List1 étant le nom d'occurence de ton ListView :-)

@plus

Commentaire de ORTIPIC le 16/07/2005 12:01:20

Badge

cette source est tres mediocre.............
mais je n avais pas encore testé un listview  ,et c est bien mieu
j ai trouvé cette source qui explique bien  ,de qui ???? chépu
j ai apporté une modif (rnd......) pour bien voir le tri des colonnes

'---------------------vla------------------------
une form /un listview /ajout du composant   micro...windows....comm.....control  (version 6 sp6)
'------------------------------------------------
Private Sub Form_Load()

Dim i As Integer ' Compteur
   Dim j As Integer ' Compteur d'objets ListSubItems
   Dim sngWidth As Single
   Dim si As ListSubItem
   Dim li As ListItem

   ' Les objets ColumnHeaders et ListSubitems ne sont pas visibles
   ' sauf si la valeur lvwReport est affectée à la propriété View.
   ListView1.View = lvwReport

   ' Calcule la largeur d'un objet ColumnHeader.
   sngWidth = ListView1.Width / 5

   ' Crée cinq objets ColumnHeader.
   For i = 1 To 5
      ListView1.ColumnHeaders.Add Text:="Col " & i, Width:=sngWidth
   Next i
  
   ' Crée vingt objets ListItem. Pour chacun d'entre eux, crée quatre
   ' objets ListSubItem. Définit la couleur rouge pour la propriété
   ' ForeColor de chaque objet.
   For i = 1 To 20
      Set li = ListView1.ListItems.Add(Text:="Élément " & i)
      For j = 1 To 4
         Set si = li.ListSubItems.Add(Text:="Sous-élément " & Int(Rnd * 100)) '' j & i &
         si.ForeColor = vbRed
      Next j
   Next i

End Sub
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
   ' Quand vous cliquez sur un objet ColumnHeader, le contrôle
   ' ListView est trié selon les sous-éléments de cette colonne.
   ' Affecte à la propriété SortKey l'index de ColumnHeader - 1
   ListView1.SortKey = ColumnHeader.Index - 1
   ' Affecte à la propriété Sorted la valeur True afin de trier la
   ' liste.
   ListView1.Sorted = True
End Sub


Private Sub ListView1_ColumnClickdd(ByVal ColumnHeader As _
              MSComctlLib.ColumnHeader)
' tri du ListView lors du clic sur l'entête de colonne
  
        Dim strName As String
        Dim dDate As Date
        Dim lngItem As Long
        Dim dTaille As Long

        'Handle User click on column header
        Select Case ColumnHeader.Text
        Case "Fichier"   'User clicked sur l'entete d'une colonne texte
           ListView1.Sorted = True        'Use default sorting to sort the
           ListView1.SortKey = 0          'items in the list
           ListView1.SortKey = ColumnHeader.Index - 1
           ListView1.SortOrder = (ListView1.SortOrder - 1) * -1
        Case "Date"     'User clicked sur l'entete d'une colonne date
           ListView1.Sorted = False      'User clicked on the Date header
                                         'Use our sort routine to sort
           indice = 1                    'by date
           Asce = Not Asce
           SendMessage ListView1.hWnd, _
                       LVM_SORTITEMS, _
                       ListView1.hWnd, _
                       AddressOf CompareDates
             ListView1.Refresh
            For lngItem = 0 To ListView1.ListItems.Count - 1
                ListView_GetListItem lngItem, ListView1.hWnd, strName, dDate
            Next
          
        Case "Taille"     'User clicked sur l'entete d'une colonne numérique
           ListView1.Sorted = False
                                         'Use our sort routine to sort
           indice = 2                    'by date
           Asce1 = Not Asce1
           SendMessage ListView1.hWnd, _
                       LVM_SORTITEMS, _
                       ListView1.hWnd, _
                       AddressOf CompareValeurs
            ListView1.Refresh
            For lngItem = 0 To ListView1.ListItems.Count - 1
                ListView_GetListItemN lngItem, ListView1.hWnd, strName, dTaille
            Next
        
        End Select
  
End Sub




Commentaire de Jielde le 26/04/2006 19:30:08

Effectivement, les ListView sont mieux.

Mais je prog une appli pour me facilité la vie dans a mon boulot, et la société a bloquer pas mal de choses dans Win2k

Je ne peut donc pas installer de nouvelles OCX et j'ai du revenir sur les bon vieux ListBox.

J'avais déja trouvé l'idée de mettre bout a bout chaque listbox, avec des labels comme en-tête de colonne.

Par contre j'arrivais pas a faire en sorte que toutes les listbox scroll en même temps. Et les Timer sont une solution.

Si vous avez d'autre solutions, je suis preneur.

Commentaire de couteau7 le 20/06/2006 19:40:04

Bonjour, peut être que vous pourrez me sauver la vie sa va fair 2 semaine que je cherche dans tous les coins et la je suis limite a jeter mon ordinateur j'ai réaliser un petit programme qui n'a pas besoins d'un listview mais juste une listbox a 2 colonnes.

Pour les remplir il y a pas de problème meme pour acceder au information mais mon réel problème c'est comment ajouter dans l'en tete des colonne se que se represent dans la colonne 1 c'est "Articles" et dans la 2 emme c'est "Quantité" j'ai tout tester j'ai regarder dans tout les code que j'ai pu trouver il y a tout d'expliquer mais rien sur sa .

veuillez m'excuser de < m'incruster >

Encore merci

Commentaire de Jielde le 20/06/2006 22:22:23

Moi a ta place, et j'ai fait sa dans mon appli, j'ai ajouter des label en haut de chaque listbox, et kan je click sur un label sa trie la listbox de facon ascendent ou déscendant.

Commentaire de couteau7 le 21/06/2006 07:05:21

Oui j'y avais pensé mais bon je pense que je vais le faire sa va me faire moins de boullot comme ça

Commentaire de ORTIPIC le 21/06/2006 18:06:02

j espere que la reponce de jielde satisfait couteau7 ?

un label semble une solution

ou un combo pour memoriser les interactions prog utilisateur

Commentaire de Jielde le 22/06/2006 01:55:32

Oui un combo/TextBox te permettra de faire des recherche intuitive dans la listbox.

Commentaire de lhoussin2006 le 22/08/2006 11:51:02


j'ai pas vu pour les Listview mais je n'estime pas que j'arriverais à les comprendre, ce qui est tout à fait génial c'est l'idée et l'algorithme que tu as choisis pour te débrouiller.
bravo!

Commentaire de 50415041 le 20/11/2006 10:54:44

OK MEN

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,368 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales