VB Tips Vol.62
リストボックスの表示数を設定する
リストボックスの項目を選択するとき、通常は8項目しか表示されませんが、10、20項目などこれ以上多くの項目数を一度に表示させることができます。ただし、3項目など8項目以下はできないようです。
| Option Explicit Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function MoveWindow Lib "User32.dll" (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 GetWindowRect Lib "User32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long Private Declare Function ScreenToClient Lib "User32.dll" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long Private Const CB_SHOWDROPDOWN = &H14F Private Const CB_GETITEMHEIGHT = &H154 Private Type POINTAPI x As Long y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Sub Form_Load() Dim i As Integer For i = 1 To 100 Combo1.AddItem CStr(i) & " 項目" Next i End Sub Private Sub Command1_Click() Dim pt As POINTAPI Dim rc As RECT Dim oldScaleMode As Long Dim ComboWidth As Long Dim newHeight As Long Dim numItems As Long Dim itemHeight As Long ' numItemsに設定した数だけ一度に表示されます ' 通常は8項目ですがそれ以下はできないようです numItems = 20 Label1 = numItems & "項目が一度に表示されます。" 'ScaleModeを記憶してからピクセルに切り替えます oldScaleMode = Form1.ScaleMode Form1.ScaleMode = vbPixels ComboWidth = Combo1.Width '1項目の高さを取得します itemHeight = SendMessage(Combo1.hWnd, CB_GETITEMHEIGHT, 0, ByVal 0) '変更後のコンボボックスの高さを計算します。 newHeight = itemHeight * (numItems + 2) Call GetWindowRect(Combo1.hWnd, rc) pt.x = rc.Left pt.y = rc.Top Call ScreenToClient(Form1.hWnd, pt) Call MoveWindow(Combo1.hWnd, pt.x, pt.y, Combo1.Width, newHeight, True) '次の行を実行するとコンボボックスの項目を自動的に表示できます 'Call SendMessage(Combo1.hWnd, CB_SHOWDROPDOWN, True, ByVal 0) Form1.ScaleMode = oldScaleMode End Sub |
サンプルプログラムのダウンロード(6KB)
※このページの内容とサンプルプログラムのコードは多少異なる場合があります。