我有一个使用ListView
控件(来自 Microsoft Common Controls)的用户窗体。
为了自动调整列的大小,ListView
我在用户窗体中使用了以下 WinAPI 调用,它可以正常工作并正确设置列的大小:
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPtr
Private Const LVM_FIRST = &H1000
Private Const LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30)
Private Const LVSCW_AUTOSIZE_USEHEADER = -2
Private Sub UserForm_Initialize()
'Autosizes the first column of the ListView
SendMessage ListView.hWnd, LVM_SETCOLUMNWIDTH, 0, LVSCW_AUTOSIZE_USEHEADER
End Sub
但是,如果我隐藏然后重新显示用户窗体(例如在事件中使用Me.Hide
和),此 WinAPI 调用会出错并将列宽设置为 ~16,000 像素。Me.Show
CommandButton
我认为错误是因为hWnd
和ListView
/或 UserForm 本身在隐藏和显示之后发生了更改。
有人知道此问题的解决方法吗?