Как создать форму поиска для RichTextBox?
Вопрос
Я бы хотел искать вверх, вниз и сопоставлять регистр, если это возможно. Буду признателен даже за ссылки, с которых можно начать.
Решение
Не уверен насчет расширенного поиска, но что касается поиска, вы можете использовать что-то вроде этого
int selStart = ControltoSearch.SelectionStart;
int selLength = ControltoSearch.SelectionLength;
int newLength = SearchFor.Length;
int newStart = searchIn.IndexOf(SearchFor, selStart + selLength, compareType);
ControltoSearch.SelectionStart = newStart >= 0 ? newStart : 0;
ControltoSearch.SelectionLength = newLength;
ControltoSearch.ScrollToCaret();
ControltoSearch.Focus();
return newStart;
В случае совпадения вы можете использовать String.ToLowerInvariant ()
как для поиска в тексте, так и для поиска текста, в противном случае String.Contains ()
чувствителен к регистру р>
searchIn.ToLowerInvariant().Contains(SearchFor.ToLowerInvariant())
Другие советы
Вы можете использовать " Найти " метод в самом Rich Text Box.
Если вы установили форму с флажком " Соответствовать регистру " и флажок "Поиск вверх"; и добавили свойство в форму поиска с именем ControlToSearch, которое принимает элемент управления RichTextBox, вы можете сделать что-то вроде следующего:
RichTextBoxFinds options = RichTextBoxFinds.None;
int from = ControlToSearch.SelectionStart;
int to = ControlToSearch.TextLength - 1;
if (chkMatchCase.Checked)
{
options = options | RichTextBoxFinds.MatchCase;
}
if (chkSearchUp.Checked)
{
options = options | RichTextBoxFinds.Reverse;
to = from;
from = 0;
}
int start = 0;
start = ControlToSearch.Find(txtSearchText.Text, from, to, options);
if (start > 0)
{
ControlToSearch.SelectionStart = start;
ControlToSearch.SelectionLength = txtSearchText.TextLength;
ControlToSearch.ScrollToCaret();
ControlToSearch.Refresh();
ControlToSearch.Focus();
}
else
{
MessageBox.Show("No match found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}