検索結果を表示するフォームのListBoxのアイテムをクリックしたら検索文字列を選択するようにすると便利かもしれません。文字列を探すために検索したわけですから・・・。
フォームには前と後のボタンがあります。クリックしたらひとつ前の文字列または後ろの文字列を選択するようにしましょう。
以前作成したこれをつかってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
public partial class SyncRichTextBox : UserControl { public int SearchStringFromHead(string str) { if (str == "") return -1; return richTextBoxEx1.Find(str, 0, RichTextBoxFinds.MatchCase); } public int SearchStringToHeadFromTail(string str) { if (str == "") return -1; return richTextBoxEx1.Find(str, 0, richTextBoxEx1.Text.Length, RichTextBoxFinds.MatchCase | RichTextBoxFinds.Reverse); } public int SearchStringFromCurent(string str) { if (str == "") return -1; int start = richTextBoxEx1.SelectionStart; int len = richTextBoxEx1.SelectionLength; int ret = richTextBoxEx1.Find(str, SelectionStart + SelectionLength, RichTextBoxFinds.MatchCase); if (ret == -1) return -1; if (ret < start) { richTextBoxEx1.Select(start, len); return -1; } return ret; } public int SearchStringToHeadFromCurent(string str) { if (str == "") return -1; int start = richTextBoxEx1.SelectionStart; int len = richTextBoxEx1.SelectionLength; int ret = richTextBoxEx1.Find(str, 0, SelectionStart, RichTextBoxFinds.MatchCase | RichTextBoxFinds.Reverse); if (ret == -1) return -1; if (ret > start) { richTextBoxEx1.Select(start, len); return -1; } return ret; } } |
SyncRichTextBox.SearchStringFromHead(string str)
先頭から後方へ検索
SyncRichTextBox.SearchStringFromCurent(string str)
現在位置から後方へ
SyncRichTextBox.SearchStringToHeadFromCurent(string str)
現在位置から前方へ
SyncRichTextBox.SearchStringToHeadFromTail(string str)
最後尾から前方へ
そのまんまの名前です。
みつからなかった場合はListBoxのひとつ前、後を調べて表示させています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public partial class SearchResultForm : Form { private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (_isIgnoreSelectChanged) return; if (_prevSelect != -1) { Data data = (Data)_treeNodeExes[_prevSelect].Data; data.RichData = syncRichTextBoxEx1.Data; } _prevSelect = listBox1.SelectedIndex; if (_prevSelect != -1) { Data data1 = (Data)_treeNodeExes[_prevSelect].Data; syncRichTextBoxEx1.Data = data1.RichData; syncRichTextBoxEx1.SearchStringFromHead(_str); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public partial class SearchResultForm : Form { private void buttonNext_Click(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index == -1 && listBox1.Items.Count > 0) { listBox1.SelectedIndex = 0; syncRichTextBoxEx1.SearchStringFromHead(_str); } int i = syncRichTextBoxEx1.SearchStringFromCurent(_str); if(i == -1 && index + 1 < listBox1.Items.Count) { listBox1.SelectedIndex++; syncRichTextBoxEx1.SearchStringFromHead(_str); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public partial class SearchResultForm : Form { private void buttonPrev_Click(object sender, EventArgs e) { int index = listBox1.SelectedIndex; if (index == -1 && listBox1.Items.Count > 0) { listBox1.SelectedIndex = 0; syncRichTextBoxEx1.SearchStringFromHead(_str); } int i = syncRichTextBoxEx1.SearchStringToHeadFromCurent(_str); if (i == -1 && index > 0) { listBox1.SelectedIndex--; syncRichTextBoxEx1.SearchStringToHeadFromTail(_str); } } } |