hola, la unica forma que se me ocurre es subclasificando a listview e interceptar cuando se hace clink en las flechas de el scroll vertical que es donde produce la falla.
En un modulo
Option Explicit
Private Declare Function RedrawWindow Lib "user32.dll" (ByVal hwnd As Long, ByRef lprcUpdate As Any, ByVal hrgnUpdate As Long, ByVal fuRedraw As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_VSCROLL = &H115
Private Const SB_LINEDOWN = 1
Private Const SB_LINEUP = 0
Public Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
Public Sub HookLView(hwnd As Long)
PrevProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookLView(hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_VSCROLL Then
Select Case GetLoWord(wParam)
Case SB_LINEDOWN
RedrawWindow hwnd, 0&, 0&, 1
Case SB_LINEUP
RedrawWindow hwnd, 0&, 0&, 1
End Select
End If
End Function
Private Function GetLoWord(dw As Long) As Long
If dw And &H8000& Then
GetLoWord = &H8000 Or (dw And &H7FFF&)
Else
GetLoWord = dw And &HFFFF&
End If
End Function
y en el form para probar.
Option Explicit
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_SETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 54)
Private Const LVM_GETEXTENDEDLISTVIEWSTYLE = (LVM_FIRST + 55)
Private Const LVS_EX_GRIDLINES = &H1&
Private Const LVS_EX_FULLROWSELECT = &H20&
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Sub Form_Load()
Dim lLvExStyle As Long
lLvExStyle = SendMessage(ListView1.hwnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0&, 0&)
lLvExStyle = lLvExStyle Or LVS_EX_GRIDLINES Or LVS_EX_FULLROWSELECT
Call SendMessage(ListView1.hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, ByVal lLvExStyle)
HookLView ListView1.hwnd
Dim i As Long
For i = 0 To 100
ListView1.ListItems.Add , , "item" & i
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookLView ListView1.hwnd
End Sub
El ejemplo que te pase esta echo para un solo listview para mas de uno a la vez ya hay que hacer unos pequeños retoques.