Suren97 Ответов: 3

В C# как найти слово в текстовое поле.текст в WPF


Мне нужно найти любое слово в textbox.Text.У меня есть два текстовых поля,в первом текстовом поле я пишу любое предложение, например` Привет,как дела? а во втором текстовом поле я пишу любое слово, например "ты",затем, когда я нажимаю на кнопку Найти, она должна подчеркнуть это слово и сказать мне, что есть 1 слово с меткой.
Кто-то может помочь мне, как я могу написать этот код с помощью WPF.
Спасибо.

Что я уже пробовал:

Это мой код`
<Grid>
        <Button Click="button1_Click" x:Name="button1" Content="Find" Margin="185,180,146,140"/>
        <TextBox x:Name="textBox1" Margin="10,10,146,191"/>
        <TextBox x:Name="textBox2" Margin="10,180,296,140"/>
    </Grid>


private void button1_Click(object sender, RoutedEventArgs e)
       {
           int index = 0;
           string temp = textBox1.Text;
           textBox1.Text = "";
           textBox1.Text = temp;
           while(index < textBox1.Text.LastIndexOf(textBox2.Text))
           {
               textBox1.Select(index, textBox2.Text.Length);
               textBox1.SelectionBrush = Brushes.Red;
               index = textBox1.Text.IndexOf(textBox2.Text, index) + 1;
           }
       }



скриншот`
[^]

3 Ответов

Рейтинг:
2

Graeme_Grant

В прошлом году мы сделали вызов кодированию, и я сделал что-то очень похожее на то, что вы просите... проверьте это здесь: Задача кодирования: найти повторяющиеся элементы в коллекции элементов.[^]


#realJSOP

Он не обязательно ищет дубликаты. Кстати, мое решение этой проблемы было недостаточно продуманным, чтобы представить его. :)

Graeme_Grant

LMAO...

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

#realJSOP

Я передумал и все равно представил свое решение. :)

Задача кодирования: найти повторяющиеся элементы в коллекции элементов.[^]

Graeme_Grant

:)

Рейтинг:
1

#realJSOP

Чтобы увидеть, существует ли слово, сделайте это:

bool found = textBox1.Text.ToLower().IndexOf("word") >= 0;


Я понятия не имею, что означает остальная часть вашего вопроса.

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


Suren97

Он должен найти это слово, а затем подчеркнуть это слово` SelectionBrush = Brushes.Синий; и в ярлыке он должен сказать мне, что сколько слов в текстовом поле есть.

Suren97

Я обновил свой код, но он ошибочен

Richard Deeming

Вы должны нормализовать строки в верхнем регистре, чтобы избежать проблемы "турецкого I" :
CA1308: нормализация строк в верхнем регистре[^]
Проблема турецкого я и почему вас это должно волновать[^]

Но в этом случае нет необходимости создавать вторую копию строки для выполнения поиска без учета регистра. Просто использовать перегрузка IndexOf что занимает некоторое время. StringComparison[^]:

bool found = textBox1.Text.IndexOf("word", StringComparison.CurrentCultureIgnoreCase) >= 0;

Suren97

Я уже писал этот код, он был так прост` текстовое поле textbox1.Выберите(текстовое поле textbox1.Текст.Метод indexOf(поле textbox2.Текст), поле textbox2.Текст.Длина);
текстовое поле 1.Сосредоточить();

Рейтинг:
0

Clifford Nelson

Привет.

Хороший способ дать вам большую гибкость форматирования-это использовать RichTextBox. Смотрите следующий учебник: элемент управления RichTextBox]