リストボックスの項目を検索するには

リストボックスの項目を検索してみます。
キーワードは「LB_FINDSTRINGメッセージ」と「LB_FINDSTRINGEXACTメッセージ」です。
LB_FINDSTRINGメッセージはリストボックスの項目の中から前方部分検索を行います。
つまり、先頭の1文字だけでも検索が可能です。
LB_FINDSTRINGEXACTメッセージはリストボックスの項目の中から全文一致検索を行います。
つまり、検索する文字と項目の文字が全部同じである必要があります。

wParamには検索を開始する項目の番号を(最初0)
lParamには検索する文字列を設定します。

アルファベットの場合、大文字・小文字が区別されないので注意しましょう。
実行中の様子
'指定のウィンドウにメッセージを送る
Private Declare Function SendMessageStr Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long, _
    ByVal wParam As Long, ByVal lParam As String) As Long
'リストボックスのメッセージ
Private Const LB_FINDSTRING = &H18F                         '前方部分検索を行う
Private Const LB_FINDSTRINGEXACT = &H1A2                    '全体一致検索を行う

Private Sub Command1_Click() Dim rc As Long '与えられた文字列と全体的に一致する文字列を探す rc = SendMessageStr(Me.List1.hWnd, LB_FINDSTRINGEXACT, -1, Me.Text1.Text) If rc > -1 Then MsgBox (rc + 1) & "項目が同じです" Me.List1.ListIndex = rc Else MsgBox "見つかりませんでした" End If End Sub
Private Sub Command2_Click() Dim rc As Long '前方一致検索を探す rc = SendMessageStr(Me.List1.hWnd, LB_FINDSTRING, -1, Me.Text1.Text) If rc > -1 Then MsgBox (rc + 1) & "項目が指定した文字列を含んでいます" Me.List1.ListIndex = rc Else MsgBox "見つかりませんでした" End If End Sub
Private Sub Form_Load() Me.Command1.Enabled = False Me.Command2.Enabled = False Me.Text1.Text = "" Me.List1.Clear Me.List1.AddItem "こんにちは。" Me.List1.AddItem "これは" Me.List1.AddItem "リストボックスの中から" Me.List1.AddItem "文字列を探す" Me.List1.AddItem "サンプルです" End Sub
Private Sub Text1_Change() If Me.Text1.Text <> "" Then Me.Command1.Enabled = True Me.Command2.Enabled = True Else Me.Command1.Enabled = False Me.Command2.Enabled = False End If End Sub
ダウンロード