§1 テキストエディタの制作 VB6 | |
(5) 検索機能の追加 U |
2. メニューの追加
テキストエディタのプログラムを呼び出し、メニューを追加する。検索メニューはメモ帳と同じように設定する。
図1-5-2 |
メニュー追加
キャプション | 名前 | ショートカット |
検索(S) | mnuSearch | |
検索(F) | mnuFind | Ctrl + F |
次を検索(N) | mnuNextFind | F3 |
置換(E) | mnuReplace | Ctrl + H |
図1-5-3 |
3. 検索フォームの追加
検索文字列や置換文字列を入力するため、フォームを追加する。
文字列を一つだけ入力するのであれば、InputBox関数(ヘルプ参照)が使えるが、ここではフォーム上にテキストボックスなどを配置して入力することにする。
フォームの追加はメニューバーから次のように選択する。
[プロジェクト(P)] → [フォームモジュールの追加(F)]
ダイアログから「フォームモジュール」を選択し、開くボタンをクリックする。追加したフォームはForm2となる。
追加したフォーム(MaxButton=False, MinButton=False)には、ラベル1個、テキストボックス1個、ボタン2個、オプションボタン2個を配置する。オプションボタンの一つ目(Option1)のValueプロパティをTrueに設定する。(図1-5-4)
図1-5-4 |
4. フォームの呼び出し
実行すると1つめのフォーム(Form1:テキストエディタ)が自動的に表示されるが、そのフォームから追加したフォーム(Form2)を呼び出すには、次のようにShowメソッドを使ってプログラムする。
Form2.Show 0
Showメソッドの引数に0を指定すると、フォームはモードレスになり、引数に1を指定すると、フォームはモーダルになる。引数を省略するとモードレスになる。
ウィンドウ (フォームおよびダイアログ ボックス) には、モーダルとモードレスの 2 種類がある。
モーダルウィンドウは、[OK] ボタンまたは [キャンセル] ボタンによってそのウィンドウを閉じるまで、ユーザーはほかのウィンドウに切り替えることができない。
モードレスは、そのウィンドウを閉じなくても、ほかのウィンドウに切り替えることができる。
追加したフォーム(Form2)を呼び出すと、Form2のLoadプロシージャから実行が始まり、Form2に書かれたプログラムが処理される。Form2を閉じると呼び出し元のForm1に処理が戻る。
フォームの呼出しは、検索メニューをクリックしたときに行えばよいので、mnuFind_ClickプロシージャにForm2.Show 0を書くだけで良い。
Private Sub mnuFind_Click() Form2.Show 0 End Sub
実行後、メニューから検索(S) → 検索(F)を選択して、検索用のウィンドウ(Form2)が表示されるか確認する。検索用のウィンドウは閉じるのボタンで閉じる。
5. 別のフォームのプロパティ参照
Form1とForm2のオブジェクトは、互いに独立しているので、Text1オブジェクトが、Form1とForm2の両方にあっても別のものとして扱われるのでかまわない。
では、例えば、Form1からForm2のText1のTextプロパティ、逆にForm2からForm1のText1のTextプロパティを参照するにはどうすればよいか。検索の処理では、検索文字列がForm2のText1にあり、被検索文字列はForm1のText1にある。
答えは、フォーム名も付けて参照する。例えば、Form2からForm1のText1のTextプロパティを参照するには、次のように書く。
Form1.Text1.Text (Form1のText1オブジェクトのTextプロパティ)
Form2(検索ウィンドウ)のプログラムリスト
キャンセルボタン(Command2)がクリックされたとき、フォームをアンロードして閉じるので、UnLoad Meだけでよい。
検索ボタン(Command1)がクリックされたとき、Text1の文字列をForm1のText1の中から検索する。このとき、検索前にオプションボタンを判定する必要がある。
Form1のText1オブジェクトのHideSelectionプロパティをFalseに設定しておく。
Dim pt As Integer '検索文字列を発見した位置 Private Sub Command1_Click() If Len(Text1.Text) = 0 Then '検索文字列なし Exit Sub '何もしない End If If Option1.Value = True Then 'カーソル位置から検索 'カーソル位置に選択されている文字長を加算 '+1は0からカウントしているため pt = Form1.Text1.SelStart + Form1.Text1.SelLength + 1 Else pt = 1 '先頭から Option1.Value = True '2回目からはカーソル位置 End If pt = InStr(pt, Form1.Text1.Text, Text1.Text) '検索 If pt = 0 Then '見つからなかった MsgBox "検索文字列は見つかりませんでした。" Else '見つかった Form1.Text1.SelStart = pt - 1 Form1.Text1.SelLength = Len(Text1.Text) End If End Sub Private Sub Command2_Click() Unload Me End Sub
(5) 検索機能の追加 U | |
Copyright © 2001,2002 Hiroshi Masuda |