C# Changer l'Élément ListView/Ligne de hauteur
Je veux changer l'Élément/Ligne de hauteur dans la listview.
J'ai cherché partout et j'ai pensé que, pour changer la hauteur j'ai besoin d'utiliser LBS_OWNERDRAWFIXED
ou MeasureItem
ou quelque chose comme ça.
Le problème est que je ne sais pas exactement quoi faire et comment l'utiliser..
Quelqu'un peut-il m'aider?
Edit:
Je ne peux pas utiliser le ImageList hack parce que je suis en utilisant le SmallImageList pour de vrai et j'ai besoin de différentes hauteur de la ligne de l'ImageList la taille des images.
Merci!
Voir stackoverflow.com/questions/1244090/.... La solution la plus Simple.
La "solution simple" est mentionné pour WPF, qui est en effet simple. Cette question concerne le WinForms -- où il est décidé de ne pas simples.
La "solution simple" est mentionné pour WPF, qui est en effet simple. Cette question concerne le WinForms -- où il est décidé de ne pas simples.
OriginalL'auteur Ron | 2011-07-03
Vous devez vous connecter pour publier un commentaire.
Il peut être fait à l'aide de la
SmallImageList
affaire-vous avez juste à être prudent. ObjectListView -- open source wrapper autour d'une norme .NETListView
-- utilise cette astuce pour réussir la mise en œuvre d'unRowHeight
propriété.Si vous souhaitez 32 pixels pour chaque ligne, allouer un
ImageList
qui est 16x32 (largeur x hauteur), puis la position de chacun de vos images dans le milieu vertical de 32 pixels de hauteur.Cette capture d'écran montre 32 pixels des lignes et l'habillage du mot qui est possible en raison de l'espace supplémentaire:
ObjectListView
fait tout ce travail pour vous. En fait, si vous essayez de faire quoi que ce soit avec une ListView, vous devriez sérieusement regardé à l'aide d'unObjectListView
à la place. Elle fait beaucoup de choses difficiles (par exemple, le tri par type de colonne, des info-bulles personnalisées) trivial, et plusieurs choses impossibles (par exemple, les superpositions, les groupes sur les listes).Je pense que vous l'avez suggéré une solution complexe
OriginalL'auteur Grammarian
Pour les gens qui ont encore de la difficulté avec cela, voici le code que j'utilise:
Pour l'utiliser, il suffit de ne:
OriginalL'auteur Maarten Peels
Vous devez utiliser un peu un hack. L'astuce consiste à utiliser une liste d'images dans la StateImageList de la propriété. Le contrôle ListView ajuster son point de hauteur, en fonction de la hauteur de l'ImageList de la propriété ImageSize. Vous n'avez pas à spécifier une image pour vos articles, mais seulement à l'aide de la StateImageList force la ListView à régler. Dans l'exemple ci-dessous, que j'avais mis de la liste d'image de taille 32x32, ce qui résulte en un 32px hauteur ListViewItem(s).
Ensuite, vous allez écrire votre propre contrôle, en raison de l'expérience et de la recherche, cela ne va pas être possible avec l'existant WinForms ListView. C'était aussi la même réponse à partir d'un MSFT le Soutien de la Communauté de dev qui a également étudié le problème pour certaines personnes, et ça c'est terminé en ce qui suggère la rédaction d'un contrôle personnalisé.
J'ai testé en détail de la mode. Cette astuce fonctionne seulement pour AUGMENTER la hauteur de ligne sur le defaut de la hauteur. Vous ne pouvez pas faire des lignes plus serré que Windows définit. Veuillez noter que la hauteur d'une listview ligne dépend du système d'exploitation. Par exemple sur Windows 7 lignes sont significativement plus élevés que sur XP. Malheureusement, cette astuce n'est pas utile pour moi.
OriginalL'auteur David Anderson
Malheureusement personne n'a répondu à votre question de départ comment utiliser
LBS_OWNERDRAWFIXED
pendant toutes ces années.La réponse que vous avez accepté, c'est l'intégration d'un énorme projet (avec les démos et de la documentation 3,3 MO). Mais juste pour le réglage de la hauteur de la ligne de ListView c'est overbloated.
L'autre solution proposée ici (ajout d'un ImageList) ne fonctionne que pour augmentation la hauteur de ligne. Mais il ne permet pas vraiment RowHeight indépendant de la hauteur de l'image. En outre, la hauteur de ligne par défaut dépend du système d'exploitation. Par exemple, sur Windows 7, les lignes sont beaucoup plus élevés que sur XP. Vous ne pouvez pas choisir de les rendre plus précises, seulement plus élevé.
Mais avec très peu de lignes, vous pouvez faire ce que vous voulez.
Il suffit de copier et coller la classe suivante:
Après l'ajout d'un ListViewEx de votre Forme, vous verrez une nouvelle propriété dans Visual Studio Concepteur de Formulaires qui permet de définir la ligne de hauteur en pixels:
La valeur que vous entrez sera à la hauteur de la ligne en pixels et il sera respecté exatctly sur tous les systèmes d'exploitation. Je l'ai testé sur Windows XP, 7 et 10:
En outre ma classe a deux avantages par rapport à l'original ListView: Il attire de scintillement et qu'il respecte les ForeColor et Police ensemble dans
ListViewSubItem
qui est ignoré par Microsoft d'origine ListView. De sorte que vous pouvez dessiner chaque cellule avec une autre couleur et la police.IMPORTANT: Que la MSDN dit
LBS_OWNERDRAWFIXED
a été conçu seulement pour plus de Détails view (vue de Rapport). Mon code fonctionne uniquement pour ce mode et c'est parce que Microsoft a conçu comme cela.Veuillez en outre noter que la définition
ListView.OwnerDraw = true
est une chose complètement différente que d'utiliserLVS_OWNERDRAWFIXED
.Je n'ai pas de mettre en œuvre le dessin icônes, parce que je n'ai pas besoin de ça. Mais vous pouvez facilement ajouter ce.
Je n'ai absolument aucune idée de quoi vous parlez. J'utilise ce code dans mon application. Il fonctionne parfaitement! Dans les captures d'écran ci-dessus, vous voyez que tous les points sont dessinés correctement, même en couleur.
Ce code ne tire pas mettre
listviewitem.UseItemStyleForSubItems
propriété en considération. Si cette propriété a la valeur false, alors lisview doit attirer l'backcolor de points. S'il vous plaît suggérer comment atteindre le même.C'était le but de mon exemple de code pour répondre à la question, mon code ne. Si vous avez besoin de plus de fonctionnalités, il est facile de modifier le code de vos besoins.
OriginalL'auteur Elmue
La ligne par défaut de la hauteur d'un ListView (en rapport mode d'affichage) est calculé sur la base du contrôle de la taille de la police.
Afin de sélectionner la hauteur de la ligne, de choisir une police à la bonne hauteur dans la liste des propriétés.
Par exemple, sélectionnez MS Sans Serif 18.
Ensuite, vous pouvez changer la police de caractères utilisée par tous les éléments:
lorsque vous insérez un nouvel élément, définissez sa propriété de police.
Pour optimiser la police mission, vous devez déclarer l'élément de la police comme un membre privé de la forme:
Puis lors de l'ajout d'éléments :
Cette astuce est la seule facile permettant d'avoir de PETITS de hauteur de ligne 😉
j'.E. définir le contrôle de la taille de la police à 7 et les éléments' une taille de police de 10.
(Testé avec VS 2008 )
OriginalL'auteur Plasmabubble
Plasmabubble a la bonne idée. Cela développe sur que et est ce que j'utilise à utiliser une étroite ligne de largeur pour les articles.
La linespacing dans une liste dépend de la ListView de police et ne peut pas être changé. Toutefois, vous pouvez définir la police pour les éléments de la liste à quelque chose de plus grand que la liste de la police.
Si vous voulez qu'il soit proportionnel, créer une police basée sur l'élément de la police.
Je veux la hauteur de l'article 90% de la normale, quelle que soit la police de caractères choisie.
Quand je remplir la liste, j'ai utilisé une police stockée dans les paramètres, mais vous pouvez également utiliser un littéral de la police comme "Consolas".
OriginalL'auteur Dana Bell