2009-07-24 4 views
3

Kann mir jemand sagen, wie kann ich die Höhe der horizontalen Bildlaufleiste in ListView in C# bekommen? ist es das gleiche wie die horizontale Standard-Bildlaufleiste, wenn ja, gibt es eine Windows-Funktion, die das zurückgibt? Im Grunde verwende ich ListView mit OwnerDraw und möchte genau wissen, wie groß mein Client-Bereich ist, der den ColumnHeader-Bereich und den HorizontalScrollbar-Bereich ausschließt.Wie bekomme ich die Höhe der horizontalen Bildlaufleiste in einem ListView?

Dank

Antwort

10
+0

Dank Fredrik! – Jefe

+0

Ok, jetzt muss ich auch ColumnHeaders Höhe berechnen, ich weiß, dass ich die Höhe mit Bounds im DrawColumnHeader-Event-Handler bekommen kann, aber ich brauche diesen Wert, bevor dieser Event-Handler ausgeführt wird. – Jefe

+0

ok Ich sollte auch hinzufügen, dass ich kein temporäres Element zur Liste hinzufügen und die Elemente [0] .Bounds.Top abrufen möchte, also sagen wir, das Listenfeld ist leer. – Jefe

2

Control.ClientRectangle schließt Scrollbars und Grenzen.

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

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

auf .Net CF, wo SystemInformation.HorizontalScrollBarHeight und SystemInformation.VerticalScrollBarWidth nicht existieren, wird ein Teil P/Invoke erforderlich:

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; 
} 
Verwandte Themen