1) 클릭이벤트 없이 인덱스 바꾸기
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Sub SetCboIndex(TgtComboBox As Object, ByVal ListIndex As Long)
'설명: 콤보박스의 현재 인덱스를 클릭이벤트 없이 바꾸는 함수
Const CB_SETCURSEL = &H14E& '인덱스값을 바꿔준다.(Click이벤트가 발생하지 않는다.)
SendMessage TgtComboBox.hWnd, CB_SETCURSEL, ListIndex, ByVal 0&
End Sub
사용예제: SetCboIndex 콤보박스명, 인덱스
일반적으로 콤보박스의 초기값을 줄때 다음과 같이 사용합니다.
콤보박스.listindex = 0
이것을 실행할경우 바로 클릭이벤트가 발생이 되죠. 이를 이용해서 코딩을 할경우도 있으나 그에
반해 클릭이벤트를 발생시키지 않기 위해 클릭이벤트 함수내에 플래그를 써서 발생못하도록 막기
도 할것입니다. 그런 일련의 과정을 거치지 않도록 하기 위해 API함수를 이용해서 만든겁니다.
P.S. 이건 아마 밑에 올려놨을 듯.
2) 콤보박스 높이를 해당 폼의 높이 혹은 해당 데이터 만큼 뿌리기
Public Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Sub SetCboSize(ObjFrm As Form, ObjCbo As ComboBox)
'설명: 콤보박스의 사이즈를 폼의 크기내에서 최대한 높이를 늘려주는 함수
Dim lnL As Long
Dim lnT As Long
Dim lnW As Long
Dim lnH As Long
Dim nScl As Integer
nScl = ObjFrm.ScaleMode
ObjFrm.ScaleMode = vbPixels
lnL = ObjCbo.Left
lnT = ObjCbo.Top
lnW = ObjCbo.Width
lnH = ObjFrm.ScaleHeight - ObjCbo.Top - 1
ObjFrm.ScaleMode = nScl
MoveWindow ObjCbo.hWnd, lnL, lnT, lnW, lnH, 1
End Sub
사용예제: SetCboSize 폼이름, 콤보박스명
위함수의 설명그대로입니다.