Pour ceux qui prennent les listview pour des listbox

Soyez le premier à donner votre avis sur cette source.

Vue 12 108 fois - Téléchargée 845 fois

Description

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 / Exemple :


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...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
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)
Messages postés
515
Date d'inscription
dimanche 17 février 2002
Statut
Membre
Dernière intervention
10 mars 2008
2
>> 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 @+
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
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.
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
21
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 ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.