次の方法で共有


指定した文字を検索してハイライト表示する方法

download.gifサンプル コードのダウンロード (vbmigtips_Search.msi, 496 KB)

※ このサンプルをインストールするには Visual Studio 2005 が必要です。

大量のデータを扱う場合、特定の文字列を検索したい場合があると思います。そこで今回は、文字列を検索し、ヒットした文字をハイライト表示する方法について紹介します (図1)。

Search_fig01.jpg
図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 のようにハイライト表示されます。