3.リストボックス内のすべての項目を完全一致・前方一致検索(19_Lst_04) (旧、SampleNo.105) |
1.リストボックス内のすべての項目を完全一致・前方一致検索 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし その他 : : このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.リストボックス内のすべての項目を完全一致・前方一致検索 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '"たちつ"を前方一致検索(最初に見つかった分だけ) 'すべての選択状態を解除する ListBox1.ClearSelected() Dim x As Integer = -1 x = ListBox1.FindString("たちつ", x) If x <> -1 Then ListBox1.SetSelected(x, True) MessageBox.Show(x + 1 & " 番目に見つかりました。") End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '"たちつ"を完全一致検索(最初に見つかった分だけ) 'すべての選択状態を解除する ListBox1.ClearSelected() Dim x As Integer = -1 x = ListBox1.FindStringExact("たちつ", x) If x <> -1 Then ListBox1.SetSelected(x, True) MessageBox.Show(x + 1 & " 番目に見つかりました。") End If End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '"たちつ"を前方一致検索(すべての項目を検索) 'すべての選択状態を解除する ListBox1.ClearSelected() Call sLBSearch(ListBox1, "たちつ") MessageBox.Show(ListBox1.SelectedIndices.Count & " 個見つかりました") End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click '"たちつ"を完全一致検索(すべての項目を検索) 'すべての選択状態を解除する ListBox1.ClearSelected() Call sLBSearch(ListBox1, "たちつ", 1) MessageBox.Show(ListBox1.SelectedIndices.Count & " 個見つかりました") End Sub Private Sub sLBSearch(ByVal LBox As ListBox, ByVal SearchStr As String, _ Optional ByVal Exact As Integer = 0, Optional ByVal sPos As Integer = -1) 'ListBox 内を完全一致・前方一致検索を再帰的に行う関数 Dim ret As Integer = -1 If Exact = 1 Then '完全一致検索 ret = ListBox1.FindStringExact(SearchStr, sPos) Else '前方一致検索 ret = ListBox1.FindString(SearchStr, sPos) End If If ret <= sPos Or ret = -1 Then '見つから無かった場合 Return Else '見つかった場合 With LBox .SelectionMode = SelectionMode.MultiExtended .SetSelected(ret, True) '見つかった行を選択状態に If ret < .Items.Count - 1 Then '次の検索 sLBSearch(LBox, SearchStr, Exact, ret) Else Return End If End With End If End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'テスト用データを表示(たちつてとの部分を色々コメントにしてテストしてください) With ListBox1 .Items.Add("たちつてと") .Items.Add("たちつてと") .Items.Add("あいたちつ") .Items.Add("かきくけこ") .Items.Add("さしすせそ") .Items.Add("たちつてと") .Items.Add("たちつ") .Items.Add("なにぬねの") .Items.Add("はひふへほ") .Items.Add("まみむめも") .Items.Add("たちつ") .Items.Add("たちつてと") .Items.Add("たちつてと") End With End Sub End Class 図1.上記実行結果 注意 上記同様の検索のサンプルは、MSDN にもありますが、データの取得状況により無限ループに入りエラーが発生しますのでご注意下さい。又、Web 上のサンプルの多くはMSDN のサンプルを元に作成されているので同様のバグがあるものがありますので注意して下さい。 (現在は、修正されているかも知れませんが?) |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
ListBox リストボックス 検索 前方一致 完全一致 連続検索 全て検索 |