Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65

Поиск и выделение символов в RichTextBox без учета регистра

07.12.2012, 23:27. Показов 4502. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как выполнить поиск в тексте в (RichTextBox)так чтобы если юзер ввел для поиска "п", то он выделял "П" и "п", а также искал их по середине текста. Заранее спасибо. В интернете подобных примеров не нашел Пожалуйста помогите
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2012, 23:27
Ответы с готовыми решениями:

Поиск в XML без учета регистра
Имеется такая конструкция для работы с XML. If objNode.InnerText.Contains(mass(x)) Then .... End If В массиве mass записаны...

Поиск слова в строке без учета регистра букв
Добрый день! Помогите пожалуйста доделать задачку. Надо найти слово в строке. Это я сделала. А вот как сделать так, чтобы при поиске слова...

Сравнение строк без учета регистра
Напишите пожалуйста, как при сравнивании данный типа string, игнорировать заглавные буквы

21
 Аватар для Desh
147 / 147 / 41
Регистрация: 01.12.2009
Сообщений: 275
08.12.2012, 10:15
Уточните, искать нужно первое вхождение "п" (или "П"), а может быть все позиции или перебирать их поочереди?
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
08.12.2012, 17:53  [ТС]
Desh, Мне нужно сделать обычный поиск в тексте как (ctrl + f) в блокноте. И если для поиска введена маленькая буква, то в тексте он находил и выделял маленькую или большую букву (ищет по порядку). К примеру: В тексте написано "Привет", а в строке где вводится текст для поиска я напечатал букву "п" и он должен найти в тексте (в данном случаи) первую букву и выделить её.
Вообще я мечтаю чтоб мне кто-то помог напечатать окно поиска блокнота.
Заранее спасибо, то я
0
525 / 487 / 98
Регистрация: 25.12.2011
Сообщений: 1,176
08.12.2012, 18:45
Вот обычный поиск:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim Pozition As Integer = 1 ' В переменной хранится позиция курсора
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' При нажатии на кнопку 'Поиск'
 
If InStr(Pozition, LCase(TextBox2.Text), LCase(Trim(TextBox1.Text))) <> 0 Then ' При помощи функции InStr в TextBox2 ищем текст введенный в TextBox1, функции LCase нужна для перевода всех символов в нижний регистр, т.е. это для того чтобы искался текст не зависимо от того в каком регистре символ(короче, ПриВет и пРИвЕТ будет искаться одинаково). Функция Trim нужна для обрезания пробелов слево и справо. Переменная Pozition задает позицию курсора(по умолчания Pozition = 1, т.е. поиск будет с первого символа)
 
TextBox2.Focus() ' TextBox2 передаем фокус
TextBox2.SelectionStart = InStr(Pozition, LCase(TextBox2.Text), LCase(Trim(TextBox1.Text))) - 1 ' Устанавливаем позицию курсора перед найденным словом. Всё дело в том, что если в тексте было найденно искомое слово, то функция выдает позицию этого слова(т.е. количество символов перед искомым словом в тексте).
TextBox2.SelectionLength = Len(Trim(TextBox1.Text)) ' Выделяем найденное слово(выделение начинается с позиции курсора, и длится столько, сколько символов в слове)
TextBox2.ScrollToCaret() ' Прокручиваем текст до выделенного слова
 
Pozition = TextBox2.SelectionStart + Len(Trim(TextBox1.Text)) ' Переменная Pozition = позиции найденного слова, это для того чтобы одно слово не искалась по несколько раз
Else ' Если ни чего не найденно(или поиск закончен), то выдаем сообщение и устанавливаем значение переменных по умолчанию
MsgBox("Поиск завершен")
Pozition = 1
End If
 
End Sub
1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
08.12.2012, 19:13  [ТС]
Hennasy, Спасибо, но он не ищет только если введены строчные буквы - только их, заглавные - только их. И еще мне надо, чтоб если в тексте встречались повторы букв или слов он икал следующие. Спасибо за внимание.
0
525 / 487 / 98
Регистрация: 25.12.2011
Сообщений: 1,176
08.12.2012, 19:38
VB.NET Скопировано
1
Pozition = TextBox2.SelectionStart + Len(Trim(TextBox1.Text))
При нажатии 2 раз на кнопку он будет искать следующее слово.
VB.NET Скопировано
1
InStr(Pozition, LCase(TextBox2.Text), LCase(Trim(TextBox1.Text)))
Все работает с регистром.
1
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
08.12.2012, 20:09
frmMain.txtEditor - поле с текстом на основной форме (frmMain - основная форма. txtEditor - поле с текстом на ней (у меня был текст бокс, но можно и ричтексбокс))
txtLookFor - поле для ввода искомого текста
txtReplase - поле для ввода текста, на который будем заменять искомый (замена сразу по всему тексту)
Скриншот формы поиска/замены во вложении.
Ну и код этой формы:
VB.NET Скопировано
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
Public Class frmSearch_Replase
'кнопка поиска (без учета регистра)
    Private Sub btnLookFor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLookFor.Click
        Dim STR As String = frmMain.txtEditor.Text
        Dim SubSTR As String = Me.txtLookFor.Text
        Dim L As Integer = Me.txtLookFor.Text.Length
        Dim Ind As Integer
        Ind = InStr(frmMain.start, STR, SubSTR)
        If Ind > 0 Then
            frmMain.txtEditor.SelectionStart = Ind - 1
            frmMain.txtEditor.SelectionLength = L
            frmMain.start = Ind + L
            frmMain.txtEditor.ScrollToCaret()
        Else
            frmMain.txtEditor.SelectionStart = 0
            frmMain.txtEditor.SelectionLength = 0
            frmMain.start = 1
            frmMain.txtEditor.ScrollToCaret()
            MsgBox("Пройден конец документа", MsgBoxStyle.Information, "Записная книжка")
        End If
    End Sub
' кнопка замены
    Private Sub btnReplase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReplase.Click
        frmMain.txtEditor.Text = frmMain.txtEditor.Text.Replace(Me.txtLookFor.Text, Me.txtReplase.Text)
    End Sub
End Class
Миниатюры
Поиск и выделение символов в RichTextBox без учета регистра  
1
 Аватар для eJ_Studio
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
08.12.2012, 22:08
зачем юзать
VB.NET Скопировано
1
InStr
если есть
VB.NET Скопировано
1
IndexOf
0
08.12.2012, 23:07

Не по теме:

да без разницы.
Пережиток vb6, по привычке вылазят иногда.

1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
08.12.2012, 23:23  [ТС]
Юпатов Дмитрий, Что-то не получается реализовать код.
frmSearch_Replase - это название второй формы?
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
09.12.2012, 00:12
Цитата Сообщение от dima208-2009 Посмотреть сообщение
frmSearch_Replase - это название второй формы?
да, это имя формы, которая на скрине на первом плане. Просто я привел ВЕСЬ код формы. Вместе с границами класса. Вторая форма, что на заднем плане - frmMain. Текстовое поле на ней - txtEditor
1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
15.12.2012, 17:58  [ТС]
Юпатов Дмитрий, Теперь он ругается на это "frmMain.star"
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
15.12.2012, 23:17
Цитата Сообщение от dima208-2009 Посмотреть сообщение
frmMain.start"
это переменная типа integer объявленная как Friend в форме frmMain. В ней хранится индекс последнего найденного набора символов. Ну это чтоб знать, откуда очередной поиск начинать. По умолчанию равна 1.
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
15.12.2012, 23:27  [ТС]
Юпатов Дмитрий, Что-то я совсем Что я делаю не правильно? Поиск.zip
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
15.12.2012, 23:54
весь код из frmMain
Кликните здесь для просмотра всего текста
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
Public Class frmMain
    Friend start As Integer = 1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        frmSearch_Replase.Show()
    End Sub
 
    Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.txtEditor.HideSelection = False
    End Sub
End Class

Весь код из frmSearch_Replase
Кликните здесь для просмотра всего текста
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class frmSearch_Replase
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim STR As String = frmMain.txtEditor.Text
        Dim SubSTR As String = Me.txtLookFor.Text
        Dim L As Integer = Me.txtLookFor.Text.Length
        Dim Ind As Integer
        Ind = InStr(frmMain.start, STR, SubSTR)
        If Ind > 0 Then
            frmMain.txtEditor.SelectionStart = Ind - 1
            frmMain.txtEditor.SelectionLength = L
            frmMain.start = Ind + L
            frmMain.txtEditor.ScrollToCaret()
        Else
            frmMain.txtEditor.SelectionStart = 0
            frmMain.txtEditor.SelectionLength = 0
            frmMain.start = 1
            frmMain.txtEditor.ScrollToCaret()
            MsgBox("Пройден конец документа", MsgBoxStyle.Information, "Записная книжка")
        End If
    End Sub
End Class
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
16.12.2012, 19:53  [ТС]
Юпатов Дмитрий, Спасибо, но он ищет буквы определенной раскладки. Если раскладка, большие буквы в тексте (П), а в поисковой строке напечатана маленькая буква (п), то он ничего не видит. А мне нужно, чтоб он искал не зависимо большая буква напечатана или нет. Пожалуйста подскажите код?
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
17.12.2012, 00:24
Попробуй изменить так:
VB.NET Скопировано
1
2
Dim STR As String = frmMain.txtEditor.Text.ToLower
Dim SubSTR As String = Me.txtLookFor.Text.ToLower
1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
17.12.2012, 17:03  [ТС]
Юпатов Дмитрий, Спасибо!!! Все работает
А можете еще подсказать пожалуйста код для кнопки "назад"? То есть юзер нажимает на поиск он ищет и выделяет первое совпадение, если 2 раз нажимает, то 2 совпадение , если 3 раз, то 3 совпадение и т.д. А если он нажмет кнопку назад, то он выделит 2 совпадение, если 2 раз, то 1 совпадение. (Что-то как в хроме)
0
 Аватар для Юпатов Дмитрий
1719 / 1206 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
17.12.2012, 17:26
хм... если честно, никогда не думал о такой надобности.
Но можно попробовать создать массив и в него записывать по порядку индексы обнаруженных совпадений. Ну а потом по этому массиву перемещаться.
Хотя тут еще и порядковый номер совпадения надо хранить где-то...
Даже лучше не массив, а коллекцию - у нее возможности по включению дополнительных элементов побогаче.
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
17.12.2012, 17:31  [ТС]
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
коллекцию
А это что?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2012, 17:31
Помогаю со студенческими работами здесь

Выделение символов в richtextbox
На форме 2 листбокса, 2 ричтекстбокса и кнопка. Dim ksl, j As Integer Private Sub Form1_Load(sender As System.Object,...

Поиск и выделение текста в RichTextBox
Приветствую. На форме есть RichTextBox1 и кнопка Button1. Так же имеется файл words.txt, находящийся рядом с исполняемым файлом. В файле...

Выделение результатов поиска (без учета регистра)
Всем привет, помогите плиз. Никак не получается выделить результыта поиска. Есть скрипт который ищет, но нужно чтобы он...

Поиск по БД без учета регистра
Здравствуйте! Вопрос такой как сделать поиск по базе данных независимым от типа первой буквы (заглавная 'вася' или строчная 'Вася') ...

Поиск без учета регистра
Здравствуйте. Подскажите, как сделать поиск по бд через TextBox чтобы не учитывался регистр. Результат поиска выносится в DataGridView.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер