§1 テキストエディタの制作 VB6
(5) 検索機能の追加 T 前へ 目次へ 次へ 

 検索とは、探したい文字列(検索文字列)を入力すると、テキスト(被検索文字列)から一致する文字列を探し出して示すことである。

 1. 文字列検索のサンプル

 文字列を検索するには、Instr関数を使用する。使い方は次の2通りある。

(a) 発見位置 = Instr(被検索文字列, 検索文字列)
(b) 発見位置 = Instr(開始位置, 被検索文字列, 検索文字列)

 被検索文字列から検索文字列を探し出し、見つかったときはその位置(先頭からの文字数)を返却する。見つからなかったときは0を返却する。
 (b)は、検索の開始位置を指定するときの書き方である。
 先頭の文字を1文字目としてカウントする(SelStartプロパティは先頭文字を0文字目としてカウントするので混同しないようにすること)。

 新規フォームを用意し、ラベル3個、テキストボックス2個、ボタン1個を配置する。

図1-5-1

 検索文字列を入力して検索ボタンをクリックすると検索を開始する。見つかったときは、Label3に見つかった位置を表示し、テキストを選択状態にする。
 同じ検索文字列のまま、もう一度検索ボタンをクリックすると発見した文字列の次から検索を再開する。
 検索文字列が見つからなかったときは、メッセージを表示する。


・プログラムリスト

Dim pt As Integer    '検索文字列を発見した位置

Private Sub Command1_Click()
    Dim sLen As Integer            '検索文字列の長さ

    sLen = Len(Text2.Text)         '検索文字列の長さ
    If sLen = 0 Then               '検索文字列なし
        Exit Sub
    End If
    pt = InStr(pt, Text1.Text, Text2.Text)    '検索
    If pt = 0 Then                            '見つからない
        MsgBox "検索文字列が見つかりませんでした"
    Else
        Label3.Caption = Str(pt) & "文字目にありました"
        Text1.SetFocus             '選択状態にする(ここから3行)
        Text1.SelStart = pt - 1    'SelStartは0からカウントする
        Text1.SelLength = sLen
    End If
    pt = pt + sLen                 '見つかった文字列の次から検索
End Sub

Private Sub Text2_Change()        '検索文字列が変更されたとき
    pt = 1                         '1文字目から検索
End Sub


Text1のHideSelectionプロパティ

 範囲選択の部分が反転状態で表示されるのは、通常、テキストボックスがアクティブ(フォーカスを持っている)のときだけなので、Text1.SetFocusを実行してからSelStartとSelLengthで範囲選択をしている。しかし、フォーカスは検索文字列の入力用テキストボックス(Text2)にある方が便利である。
 テキストボックスでは、フォーカスに関係なく、範囲選択の部分を反転状態で表示させることができる。HideSelectionプロパティでフォーカスを失ったときに範囲選択の状態を非表示にするかどうかを指定する。

HideSelection → Falseに設定する。
        True = 非表示、 False = 表示

 ※ Text1にフォーカスを設定する必要がなくなるので、プログラムリストのText1.SetFocus削除する。


 (5) 検索機能の追加 T 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system