Scrollbars aus Listview entfernen, aber scrollen können

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Scrollbars aus Listview entfernen, aber scrollen können

    Hallo zusammen,

    vielleicht kann mir jemand einen Tipp geben:

    Ich möchte die Scrollbars einer Listview weg haben:

    ListView1.Scrollable = false gehts auch, aber dann funktioniet auch das Folgende nicht mehr

    ListView1.TopItem = (irgend ein Item der Liste, das dann zu oberst erscheint)

    Dann kann man die Liste auch nicht mehr selbst scrollen.

    Da ich eigene Navigationsbuttons habe (macht sich auf nem Touch Screen besser), möchte ich trotzdem scrollen können (was auch bereits funktioniert, aber eben nur, wenn die Scrollbars auch sichtbar sind, was ich aber nicht will).

    Gibt es eine Möglichkeit, einer Listview die Scrollbars "wegzunehmen", trotzdem aber mit .TopItem = <irgendwas> scrollen zu können?

    Danke und Gruß

    Ole

    Scrollbars aus Listview entfernen, aber scrollen können

    Hallo Alex,

    ich bekomme das Sample leider nicht im Visual Studio 2010 unter .NET4 zum laufen...

    Bin inzwischen auch auf "ShowScrollBar()" gestoßen, die in "User32" deklariert ist, was wohl das ist, wonach ich suche, aber ich bekomme immer eine pInvokeStackImbalance Fehlermeldung - und die ist ein bischen über meinem Verständnis-Horizont...

    Hat dazu jemand einen guten Tipp?

    Danke und Gruß

    Ole
    OK: Ich hab was Funktionierendes gefunden, aber .....

    Wann immer die ListView einen redraw Event bekommt, erscheinen die Scrollbars wieder und ich muss die wieder entfernen. Das flackert ganz fürchterlich - aber geht ;)


    Hier der Code:

    VB.NET-Quellcode

    1. '(in meiner Form ein 1ms TimerTick)
    2. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    3. NativeMethods.ShowScrollBar(lvValues.Handle, 3, 0)
    4. End Sub
    5. End Class
    6. 'unter der Form diese Class einfügen
    7. <System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)> _
    8. Public Structure HWND__Public unused As Integer
    9. End Structure
    10. Partial Public Class NativeMethods<System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint:="ShowScrollBar")> _
    11. Public Shared Function ShowScrollBar(<System.Runtime.InteropServices.InAttribute()> ByVal hWnd As System.IntPtr, ByVal wBar As Integer, <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)> ByVal bShow As Boolean) As <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)> BooleanEnd Function
    12. End Class


    vielleicht hilfts dem einen oder anderen

    Gruß

    Ole
    Du muß der Code umschreiben, versuch selber umzuschreiben.
    API Deklarationen für NET findest hier: pinvoke.net/default.aspx/user32.isiconic

    PS: Habe EXE ertstellt, ist genau dein lösung, siehe anhang (hoffe mit ausführen wird klappen) !
    Dateien
    • Project1.exe

      (196,61 kB, 190 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SystemUnknow“ ()

    sorry für doppelpost.
    So schaut der Code aus (habe angepasst):

    VB.NET-Quellcode

    1. Option Explicit
    2. Private Type SCROLLINFO
    3. cbSize As Long
    4. fMask As Long
    5. nMin As Long
    6. nMax As Long
    7. nPage As Long
    8. nPos As Long
    9. nTrackPos As Long
    10. End Type
    11. Private Declare Function GetScrollInfo Lib "user32" (ByVal hWnd As Long, _
    12. ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long
    13. Private Const SIF_RANGE = &H1
    14. Private Const SIF_PAGE = &H2
    15. Private Const SIF_POS = &H4
    16. Private Const SIF_DISABLENOSCROLL = &H8
    17. Private Const SIF_TRACKPOS = &H10
    18. Private Const SIF_ALL = (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)
    19. Private Const SB_HORZ As Long = 0
    20. Private Const SB_VERT As Long = 1
    21. Private Const SB_CTL As Long = 2
    22. Private Const SB_BOTH As Long = 3
    23. Private Declare Function SendMessage Lib "user32.dll" _
    24. Alias "SendMessageA" (ByVal hWnd As Long, _
    25. ByVal wMsg As Long, _
    26. ByVal wParam As Long, _
    27. lParam As Any) As Long
    28. Private Declare Function GetWindowLong _
    29. Lib "user32" Alias "GetWindowLongA" _
    30. (ByVal hWnd As Long, _
    31. ByVal nIndex As Long) As Long
    32. Private Const WS_VSCROLL As Long = &H200000
    33. Private Const WS_HSCROLL As Long = &H100000
    34. Private Const GWL_STYLE As Long = (-16)
    35. Private Const LVM_FIRST As Long = &H1000
    36. Private Const LVM_FINDITEM As Long = (LVM_FIRST + 13)
    37. Private Const LVFI_NEARESTXY As Long = &H40
    38. Private Const LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40)
    39. Private Const LVM_SCROLL = (LVM_FIRST + 20)
    40. Dim b As Long
    41. Dim lngScrollPage As Long
    42. Dim lngScrollMax As Long
    43. Const lngScrollItem As Long = 75
    44. Private sngScroll As Single
    45. Private Sub LoadLVW()
    46. Dim a As Long
    47. Dim lMax As Long
    48. lMax = 100
    49. With ListView 'Loads data into Listviews
    50. For a = 1 To lMax
    51. .ListItems.Add , "_" & a, "Item " & a, a
    52. Next a
    53. End With
    54. End Sub
    55. Private Function ListViewScroll(lvw As ListView, ByVal dx As Long, ByVal dy As Long)
    56. 'This function determines if scroll bars are visible
    57. 'on the "Hidden" Listview
    58. SendMessage lvw.hWnd, LVM_SCROLL, dx, ByVal dy
    59. End Function
    60. Private Sub cmdItemAb_Click()
    61. sngScroll = (lngScrollItem)
    62. Call ListViewScroll(ListView, 0, sngScroll)
    63. End Sub
    64. Private Sub cmdItemAuf_Click()
    65. sngScroll = (lngScrollItem) * -1
    66. Call ListViewScroll(ListView, 0, sngScroll)
    67. End Sub
    68. Private Sub Form_Load()
    69. 'Set up Listviews
    70. ListView.Icons = ImageList
    71. ListView.FlatScrollBar = True 'Don't display scrollbar on visible Listview
    72. Call LoadLVW 'Load Data into Listviews
    73. End Sub
    74. Private Sub Form_Resize()
    75. Dim a As Long
    76. With ListView 'Resizes listviews to form scale height
    77. .Height = ScaleHeight - 100
    78. .Top = 0
    79. End With
    80. Call ListViewScroll(ListView, 0, (lngScrollMax) * -1) ' Scrolls listview to top when form is re-sized
    81. End Sub


    Muß du nur umschreiben !