Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

POUR CEUX QUI PRENNENT LES LISTVIEW POUR DES LISTBOX


Information sur la source

Description

Cliquez pour voir la capture en taille normale
En gros c'est une fonction pratique plus qu'autre chose mais bon je me suis dit que cela pouvait intéresser du monde...

Cette fonction sert pour les ListView avec une seule colonne (avec ou sans icone, avec ou sans checkbox) pour adapter la largeur de la colonne à la largeur du plus large  listitem afin d'avoir un réel rendu de FullRowSelect

Propriétés indispensables du listview pour cette fonction:
View=lvwReport
FullRowSelect=True
Avoir au moins une colonne
 

Source

  • Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  • Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
  • Private Const LVM_FIRST = &H1000
  • Private Const LVM_SETCOLUMNWIDTH = LVM_FIRST + 30
  • Private Const LVSCW_AUTOSIZE = -1
  • Private Sub RefreshLV(LV As ListView)
  • LockWindowUpdate LV.Hwnd
  • Call SendMessage(LV.Hwnd, LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE)
  • If LV.ColumnHeaders(1).Width < LV.Width Then
  • If LV.Height > (LV.ListItems.Count * 270) Then
  • LV.ColumnHeaders(1).Width = LV.Width - 80
  • Else
  • If LV.ColumnHeaders(1).Width < LV.Width - 320 Then
  • LV.ColumnHeaders(1).Width = LV.Width - 320
  • End If
  • End If
  • End If
  • LockWindowUpdate 0&
  • End Sub
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

Private Const LVM_FIRST = &H1000
Private Const LVM_SETCOLUMNWIDTH = LVM_FIRST + 30
Private Const LVSCW_AUTOSIZE = -1

Private Sub RefreshLV(LV As ListView)
    
    LockWindowUpdate LV.Hwnd
    Call SendMessage(LV.Hwnd, LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE)
    
    If LV.ColumnHeaders(1).Width < LV.Width Then
        If LV.Height > (LV.ListItems.Count * 270) Then
            LV.ColumnHeaders(1).Width = LV.Width - 80
        Else
            If LV.ColumnHeaders(1).Width < LV.Width - 320 Then
                LV.ColumnHeaders(1).Width = LV.Width - 320
            End If
        End If
    End If
    LockWindowUpdate 0&
    
End Sub

Conclusion

Voilà , c'est pas bien méchant mais ça peut toujours servir...
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de econs le 02/09/2005 15:39:58 administrateur CS



If LV.Height > (LV.ListItems.Count * 270) Then

Je suppose que le 270 dépend de la police employée dans la listview, et de la taille des caractères ...

signaler à un administrateur
Commentaire de sebmafate le 02/09/2005 16:19:32 administrateur CS

en mettant -2 pour la largeur de la colonne, normalement elle est redimensée à la plus grande largeur... le problème c'est qu'il faut renseigner cette largeur après chaque insertion.

signaler à un administrateur
Commentaire de yomm le 02/09/2005 17:12:39

>> ECONS
en effet, j'utilise toujours la police par défaut mais bien vu! Pour cela utilisons la propriété height d'un listitem ;-) et en testant qu'il y a bien au moins 1 item dans la list...enfin bref cela donne :

Private Sub RefreshLV(LV As ListView)
    
    LockWindowUpdate LV.Hwnd
    Call SendMessage(LV.Hwnd, LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE)
    
    If LV.ColumnHeaders(1).Width < LV.Width Then
        If LV.ListItems.Count = 0 Then
            LV.ColumnHeaders(1).Width = LV.Width - 80
            LockWindowUpdate 0&
            Exit Sub
        ElseIf LV.Height > (LV.ListItems.Count * LV.ListItems(1).Height) Then
            LV.ColumnHeaders(1).Width = LV.Width - 80
        Else
            If LV.ColumnHeaders(1).Width < LV.Width - 320 Then
                LV.ColumnHeaders(1).Width = LV.Width - 320
            End If
        End If
    End If
    LockWindowUpdate 0&
    
End Sub


Pour le 80 il s'agit des bordures et pour le 320 de la largeur du scrollbar. enfin voilà maintent cela doit prendre la police en compte!!!

>> SEBMAFATE
je comprends pas trop ce que tu proposes....en effet , LV.ColumnHeaders(1).Width = -2 génère une erreur donc peut préciser ton idée STP...

bon dev et @+

signaler à un administrateur
Commentaire de sebmafate le 02/09/2005 21:49:33 administrateur CS

c'est moi qui ai mal lu... en .NET -2 permet d'ajuster la taille de la colonne au plus grand contenu (header ou cellule)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Ajouté un ListBox dans un ListView [ par Creat ] Bonjour à tous,J'aimerais savoir comment faire pour ajouté un ListBox dans une colonne d'un ListView en VB.NetJ'ai 4 colonnes et j'aimerais que la col Détecter la présence de scrollbar dans un lisview [ par bioman2 ] Bonjour à tous...Mon problème est le suivant :J'ai un listview à une colonne. Je voudrais que la taille de la colonne soit celle du listview quand il Alignement d'une ListBox multicolonne en VB Excel 97 [ par Philonimbus ] Bonjour, est-il possible de changer l'alignement de chaque colonne d'une listbox multicolonne. Par exemple : aligner la première colonne à gauche et l Figer la première colonne dans un listview [ par jl2050 ] Bonjour,Je cherche le moyen de figer la première colonne d'une listview pour que lorsqu'on scroll horizontalement, on puisse voir l'information de cet ListBox/ListView sans scrollbar [ par salazar ] Comment supprimer la scrollbar verticale d'un listbox (à 2 colonnes) ?Existe t'il une API ?Existe t'il une astuce ?Merci. comment modifier un listview [ par RMOINAS ] sltVoilà j'ai essayé de modifier la ligne d'un listview par exemple :le liestview a trois colonne le première colonne la vitesse la deuxième le temps Listview VB [ par mjailly ] Voila j'ai une listview avec plusieurs colonnes et j'aimerai avoir une option dans le style de l'explorateur windows (quand on clique droit sur une en colonnes avec listview [ par Waldo2188 ] BonjourJe souhaiterai mettre différente colonne dans une listview(Nom, prenom, datenais...)Je crois savoir comment créer les colonne mais je ne sais p cacher colonne listview [ par musicmandj5 ] Bonjour, jechercher comment cacher une colonne d'une listview....Merci d'avanceBenoit listview et icons [ par odan71 ] slt à tous, voila mon pb: dans une listview, je cherche à mettre un icone dans une colonne (autre que la première) en gardant la propriété view à ivwr


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.