指定した文字を検索してハイライト表示する方法
サンプル コードのダウンロード (vbmigtips_Search.msi, 496 KB)
※ このサンプルをインストールするには Visual Studio 2005 が必要です。
大量のデータを扱う場合、特定の文字列を検索したい場合があると思います。そこで今回は、文字列を検索し、ヒットした文字をハイライト表示する方法について紹介します (図1)。
図1
Visual Basic 2005 で指定した文字列を検索する場合、正規表現を使用して指定した文字列を検索し、Regex.Matches メソッドを使用して、検索された文字列を取得します。実装コードは以下のとおりです。
Private Sub searchButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles searchButton.Click If Me.searchText.Text.Length > 0 And Me.RichTextBox1.Text.Length > 0 Then Dim regex As Regex = New Regex(Me.searchText.Text) Dim matches As MatchCollection = regex.Matches(Me.RichTextBox1.Text) Me.RichTextBox1.HideSelection = True For Each match As Match In matches Me.RichTextBox1.Select(match.Index, match.Length) Me.RichTextBox1.SelectionBackColor = Color.Yellow Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font.FontFamily, Me.RichTextBox1.Font.Size, FontStyle.Bold) Next Me.RichTextBox1.Select(0, 0) Else MessageBox.Show("検索する文字列、及び、対照となるテキストを入力してください", "実行エラー") End If End Sub
リスト1
上記 (リスト1) の「Dim regex As Regex = New Regex(Me.searchText.Text)」で、正規表現のパターンを指定し Regex クラスのインスタンスを作成します。
「Dim matches As MatchCollection = regex.Matches(Me.RichTextBox1.Text)」で正規表現と一致するすべてを検索し MatchCollection オブジェクトで返します。
「For Each match As Match In matches ... Next」では、Regex.Matches メソッドによって取得した文字列をすべてハイライト表示させます。
「Me.RichTextBox1.Select(match.Index, match.Length) 」で取得した文字列を選択し、
「Me.RichTextBox1.SelectionBackColor = Color.Yellow」で選択した文字列の背景色を黄色に、
「Me.RichTextBox1.SelectionFont = New Font(Me.RichTextBox1.Font.FontFamily, Me.RichTextBox1.Font.Size, FontStyle.Bold)」で選択した文字列を太字で表示します。
リスト1 を実装し、検索の対象となるテキスト (RichTextBox) とツールバーの「検索する文字列」欄 (TextBox) に検索する文字列を入力し、「検索」ボタンをクリックします。すると、指定した「検索する文字列」と一致する文字列があった場合、図1 のようにハイライト表示されます。