У меня есть этот код для изменения размера пользовательской формы sameCustomerForm
окно:
Private Declare Function GetForegroundWindow Lib "User32.dll" () As Long
Private Declare Function GetWindowLong _
Lib "User32.dll" Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) _
As Long
Private Declare Function SetWindowLong _
Lib "User32.dll" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
Private Const WS_THICKFRAME As Long = &H40000
Private Const GWL_STYLE As Long = -16
Public Sub FormResizable()
Dim lStyle As Long
Dim hWnd As Long
Dim RetVal
hWnd = GetForegroundWindow
lStyle = GetWindowLong(hWnd, GWL_STYLE) Or WS_THICKFRAME
RetVal = SetWindowLong(hWnd, GWL_STYLE, lStyle)
End Sub
В пользовательской форме sameCustomerForm
код:
Private Sub UserForm_Activate()
Call FormResizable
End Sub
Тогда у меня есть список lstSelector
в пользовательской форме sameCustomerForm
. Я хотел бы прикрепить lstSelector
к сторонам пользовательской формы, как это можно сделать в Visual Studio при разработке приложения WinForms с привязкой объектов к сторонам формы.
Есть какие-нибудь идеи, как этого можно достичь в пользовательской форме Excel?
РЕДАКТИРОВАТЬ:
Это почти работает. Теперь все меняется в пропорциях, кроме дна. Я пропускаю нижнюю полосу прокрутки в окне изменения размера, если .Height = sameCustomerForm.Height / 1
и .Height = sameCustomerForm.Height / 2
нижняя полоса прокрутки слишком высокая. Возникли проблемы с прилипанием дна к низу ...
Private Sub UserForm_Resize()
With sameCustomerForm.lstSelector
.Width = sameCustomerForm.Width - 12
.Height = sameCustomerForm.Height / 2
.Top = 54
.Left = 0
End With
End Sub
EDIT2:
Этот сделал свое дело:
Private Sub UserForm_Resize()
With sameCustomerForm.lstSelector
.Width = sameCustomerForm.Width - 12
.Height = sameCustomerForm.InsideHeight - 54
.Top = 54
.Left = 0
End With
End Sub