2009-07-24 7 views
3

Quelqu'un peut-il me dire comment puis-je obtenir la hauteur de la barre de défilement horizontale dans ListView en C#? est-ce la même chose que la barre de défilement horizontale standard, si oui y a-t-il une fonction de Windows qui retourne cela? Fondamentalement, j'utilise ListView avec OwnerDraw et je veux savoir exactement quelle est la taille de ma zone client qui exclut la zone ColumnHeader et la zone HorizontalScrollbar.Comment obtenir la hauteur de la barre de défilement horizontale dans un ListView

Merci

Répondre

10
+0

Merci Fredrik! – Jefe

+0

Ok maintenant, j'ai aussi besoin de calculer la hauteur de ColumnHeader, je sais que je peux obtenir la hauteur en utilisant Bounds dans le gestionnaire d'événements DrawColumnHeader mais j'ai besoin de cette valeur avant que le gestionnaire d'événement soit exécuté. – Jefe

+0

ok Je devrais également ajouter que je ne veux pas ajouter un élément temp à la liste et obtenir les éléments [0] .Bounds.Top, alors disons que la listview est vide. – Jefe

2

Control.ClientRectangle exclut les barres de défilement et les frontières.

listView1.Scrollable = true; 
    Console.WriteLine(listView1.ClientRectangle); 
    Console.WriteLine(listView1.Size); 
    listView1.Scrollable = false; 

    Console.WriteLine(listView1.ClientRectangle); 
    Console.WriteLine(listView1.Size); 
0

.Net CF, où SystemInformation.HorizontalScrollBarHeight et SystemInformation.VerticalScrollBarWidth n'existent pas, certains P/Invoke est nécessaire:

public sealed class Native 
{ 
    public static Int32 GetVerticalScrollbarWidth() 
    { 
     return GetSystemMetrics(SM_CXVSCROLL); 
    } 

    public Int32 GetHorizontalScrollbarHeight() 
    { 
     return GetSystemMetrics(SM_CYHSCROLL); 
    } 

    [DllImport("coredll.dll", SetLastError = true)] 
    public static extern Int32 GetSystemMetrics(Int32 index); 

    public const Int32 
     SM_CXVSCROLL = 2, 
     SM_CYHSCROLL = 3; 
} 
Questions connexes