본문 바로가기

Window Programming/VB

콤보박스 관련 함수들

 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 폼이름, 콤보박스명

 

위함수의 설명그대로입니다.