0

我有一个使用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.ShowCommandButton

我认为错误是因为hWndListView/或 UserForm 本身在隐藏和显示之后发生了更改。

有人知道此问题的解决方法吗?

4

0 回答 0