Как создать форму поиска для RichTextBox? - PullRequest
1 голос
/ 08 мая 2009

Я бы хотел искать вверх, вниз и совпадать с регистром, если это возможно. Буду признателен даже за ссылки, с которых можно начать.

Ответы [ 2 ]

1 голос
/ 08 мая 2009

Вы можете использовать метод «Найти» в самом текстовом поле.

Если вы установили форму с флажком «Match Case» и флажком «Search Up» и добавили в форму поиска свойство 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);
}
0 голосов
/ 08 мая 2009

Не уверен насчет расширенного поиска, но что касается поиска, вы можете использовать что-то вроде этого

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...