Cela pourrait être un peu hacky mais vous pouvez le faire:
listView.Items[0].Bounds.Top
Cela ne fonctionnera que si il n'y a qu'un seul élément dans la liste. De sorte que vous pouvez ajouter temporairement un moment où vous créez la liste et de garder la valeur de la hauteur.
D'autre, vous pouvez toujours utiliser:
listView.TopItem.Bounds.Top
De faire le test à tout moment, mais vous avez encore besoin d'au moins un élément dans la liste.
11
Voici comment obtenir la liste de l'en-tête hauteur à l'aide d'Win32 Interop appels.
[Serializable,StructLayout(LayoutKind.Sequential)]publicstruct RECT
{publicintLeft;publicintTop;publicintRight;publicintBottom;}constlong LVM_FIRST =0x1000;constlong LVM_GETHEADER =(LVM_FIRST +31);[DllImport("user32.dll",EntryPoint="SendMessage")]privatestaticexternIntPtrSendMessage(IntPtr hwnd,long wMsg,long wParam,long lParam);[DllImport("user32.dll")]privatestaticexternboolGetWindowRect(HandleRef hwnd,out RECT lpRect);
RECT rc =new RECT();IntPtr hwnd =SendMessage(ListView1.Handle, LVM_GETHEADER,0,0);if(hwnd !=null){if(GetWindowRect(newHandleRef(null, hwnd),out rc)){int headerHeight = rc.Bottom- rc.Top;}}
2
@Phèdre
..longtemps depuis longtemps.. mais: PInvokeStackImbalance est appelé
Cela pourrait être un peu hacky mais vous pouvez le faire:
Cela ne fonctionnera que si il n'y a qu'un seul élément dans la liste. De sorte que vous pouvez ajouter temporairement un moment où vous créez la liste et de garder la valeur de la hauteur.
D'autre, vous pouvez toujours utiliser:
De faire le test à tout moment, mais vous avez encore besoin d'au moins un élément dans la liste.
Voici comment obtenir la liste de l'en-tête hauteur à l'aide d'Win32 Interop appels.
@Phèdre
..longtemps depuis longtemps.. mais:
PInvokeStackImbalance est appelé
La signature de SendMessage est (long != Uint32):
Changer tous:
Vérifié cela fonctionne dans mon Win32++ application:
En-tête hauteur est rcHdr.Hauteur()
Code Correct: