0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
1

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

07.12.2012, 23:27. Показов 4469. Ответов 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 .......

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

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

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

21
147 / 147 / 41
Регистрация: 01.12.2009
Сообщений: 275
08.12.2012, 10:15 2
Уточните, искать нужно первое вхождение "п" (или "П"), а может быть все позиции или перебирать их поочереди?
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
08.12.2012, 17:53  [ТС] 3
Desh, Мне нужно сделать обычный поиск в тексте как (ctrl + f) в блокноте. И если для поиска введена маленькая буква, то в тексте он находил и выделял маленькую или большую букву (ищет по порядку). К примеру: В тексте написано "Привет", а в строке где вводится текст для поиска я напечатал букву "п" и он должен найти в тексте (в данном случаи) первую букву и выделить её.
Вообще я мечтаю чтоб мне кто-то помог напечатать окно поиска блокнота.
Заранее спасибо, то я
0
525 / 487 / 98
Регистрация: 25.12.2011
Сообщений: 1,176
08.12.2012, 18:45 4
Вот обычный поиск:
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  [ТС] 5
Hennasy, Спасибо, но он не ищет только если введены строчные буквы - только их, заглавные - только их. И еще мне надо, чтоб если в тексте встречались повторы букв или слов он икал следующие. Спасибо за внимание.
0
525 / 487 / 98
Регистрация: 25.12.2011
Сообщений: 1,176
08.12.2012, 19:38 6
VB.NET
1
Pozition = TextBox2.SelectionStart + Len(Trim(TextBox1.Text))
При нажатии 2 раз на кнопку он будет искать следующее слово.
VB.NET
1
InStr(Pozition, LCase(TextBox2.Text), LCase(Trim(TextBox1.Text)))
Все работает с регистром.
1
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
08.12.2012, 20:09 7
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
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
08.12.2012, 22:08 8
зачем юзать
VB.NET
1
InStr
если есть
VB.NET
1
IndexOf
0
Юпатов Дмитрий
08.12.2012, 23:07
  #9

Не по теме:

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

1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
08.12.2012, 23:23  [ТС] 10
Юпатов Дмитрий, Что-то не получается реализовать код.
frmSearch_Replase - это название второй формы?
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
09.12.2012, 00:12 11
Цитата Сообщение от dima208-2009 Посмотреть сообщение
frmSearch_Replase - это название второй формы?
да, это имя формы, которая на скрине на первом плане. Просто я привел ВЕСЬ код формы. Вместе с границами класса. Вторая форма, что на заднем плане - frmMain. Текстовое поле на ней - txtEditor
1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
15.12.2012, 17:58  [ТС] 12
Юпатов Дмитрий, Теперь он ругается на это "frmMain.star"
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
15.12.2012, 23:17 13
Цитата Сообщение от dima208-2009 Посмотреть сообщение
frmMain.start"
это переменная типа integer объявленная как Friend в форме frmMain. В ней хранится индекс последнего найденного набора символов. Ну это чтоб знать, откуда очередной поиск начинать. По умолчанию равна 1.
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
15.12.2012, 23:27  [ТС] 14
Юпатов Дмитрий, Что-то я совсем Что я делаю не правильно? Поиск.zip
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
15.12.2012, 23:54 15
весь код из 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  [ТС] 16
Юпатов Дмитрий, Спасибо, но он ищет буквы определенной раскладки. Если раскладка, большие буквы в тексте (П), а в поисковой строке напечатана маленькая буква (п), то он ничего не видит. А мне нужно, чтоб он искал не зависимо большая буква напечатана или нет. Пожалуйста подскажите код?
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
17.12.2012, 00:24 17
Попробуй изменить так:
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  [ТС] 18
Юпатов Дмитрий, Спасибо!!! Все работает
А можете еще подсказать пожалуйста код для кнопки "назад"? То есть юзер нажимает на поиск он ищет и выделяет первое совпадение, если 2 раз нажимает, то 2 совпадение , если 3 раз, то 3 совпадение и т.д. А если он нажмет кнопку назад, то он выделит 2 совпадение, если 2 раз, то 1 совпадение. (Что-то как в хроме)
0
1717 / 1204 / 228
Регистрация: 23.12.2010
Сообщений: 1,541
17.12.2012, 17:26 19
хм... если честно, никогда не думал о такой надобности.
Но можно попробовать создать массив и в него записывать по порядку индексы обнаруженных совпадений. Ну а потом по этому массиву перемещаться.
Хотя тут еще и порядковый номер совпадения надо хранить где-то...
Даже лучше не массив, а коллекцию - у нее возможности по включению дополнительных элементов побогаче.
0
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
17.12.2012, 17:31  [ТС] 20
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
коллекцию
А это что?
0
17.12.2012, 17:31
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2012, 17:31
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru