宮崎県延岡市 | スマイルカラーソフトウェア | ユーザースタイルに合わせたプログラミングでお客様に幸せをお届けします。

コンボボックスにおけるドロップダウンリストの高さを変更

コンボボックスのドロップダウンリストは通常、8アイテムしか表示されません。場合によっては不便だったりします。
これを Windows API を使用して変更します。

宣言部は以下のとおりです。モジュールレベルに配置してください。

Private Const CB_GETITEMHEIGHT = &H154
' ウインドウの位置・サイズを変更する関数の宣言
Private 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
'ウィンドウへメッセージを送る
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                                (ByVal hWnd As Long, ByVal wMsg As Long, _
                                 ByVal wParam As Long, lParam As Long) As Long

以下のように使用します。ドロップダウンリストのアイテム数を20にしてみました。

Dim CBHeight As Long
Dim Result As Long
Dim lDefault As LonglDefault = Combo1.Parent.ScaleMode ' 現在のスケールモードを保存

Combo1.Parent.ScaleMode = vbPixels ' スケールモードをピクセルに
With Combo1
    ' 項目の高さを取得
    CBHeight = SendMessage(.hWnd, CB_GETITEMHEIGHT, 0&, ByVal 0&)
    ' 20項目表示する場合の高さを求める
    CBHeight = .Height + CBHeight * 20 + 2
    ' コンボボックスの高さを変更
    Result = MoveWindow(.hWnd, .Left, .Top, .Width, CBHeight, 1&)
    ' リストを作成
    For Result = 1 To 20
        .AddItem CStr(Result)
    Next
End With
Combo1.Parent.ScaleMode = lDefault ' スケールモードを元に戻す

結果は次のようになります。