Как выполнить операцию Find/FindNext в Notepad C# winforms

Пожалуйста, кто-нибудь предложить мне некоторые идеи относительно того, как выполнить операцию поиска /findNext в программе блокнота на C#. Я хочу найти все вхождения строк в RichTextBox и выделить каждое вхождение по нажатию кнопки findNext.

2 ответа

Решение

Я создал клон блокнота в C#, который реализует операцию find / findnext, идентичную блокноту Window. Вы можете найти источник здесь:

http://www.simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html

Вот как выглядит код функции в приложении:

    private string _LastSearchText;
    private bool _LastMatchCase;
    private bool _LastSearchDown;

    public bool FindAndSelect(string pSearchText, bool pMatchCase, bool pSearchDown) {
        int Index;

        var eStringComparison = pMatchCase ? StringComparison.CurrentCulture : StringComparison.CurrentCultureIgnoreCase;

        if (pSearchDown) {
            Index = Content.IndexOf(pSearchText, SelectionEnd, eStringComparison);
        } else {
            Index = Content.LastIndexOf(pSearchText, SelectionStart, SelectionStart, eStringComparison);
        }

        if (Index == -1) return false;

        _LastSearchText = pSearchText;
        _LastMatchCase = pMatchCase;
        _LastSearchDown = pSearchDown;

        SelectionStart = Index;
        SelectionLength = pSearchText.Length;

        return true;
    }

Этот метод находится на главной форме. Он учитывает параметры в диалоговом окне "Найти". В нем хранятся значения параметров, чтобы можно было выполнить "Найти далее"/F3 позже. Некоторые из свойств, которые вы видите, как SelectionStart, SelectionLength, а также Content по существу, псевдонимы к TextBox"s SelectionStart, SelectionLength, а также Text свойства.

Другие вопросы по тегам