Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
29 / 8 / 3
Регистрация: 22.10.2013
Сообщений: 447

Поиск в ListBox при наборе искомого в TextBox

27.09.2016, 20:06. Показов 5868. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю простой поиск в ListBox набирая текст в TextBox:
VB.NET
1
2
3
4
5
        Dim i As Integer = ListBox2.FindString(TextBox5.Text)
        ListBox2.SelectedIndex = i
        If TextBox5.Text = "" Then
            ListBox2.SelectedIndex = -1
        End If
Но мне нужен поиск по региону, например, набирая не цифры а сразу "Якутск"
В ListBox2:
HTML5
1
2
3
4
5
73  Дальний Восток
74  Якутск
75  Владивосток
76  Хабаровск
77  Благовещенск
А может быть необходим другой контрол, а не ListBox
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2016, 20:06
Ответы с готовыми решениями:

Синхронизировать текст в двух TextBox при наборе
Всем привет! У меня в программе есть два textbox-а. Если отметить галку копировать, то когда вводишь текст в первый textbox, то этот текст...

Поиск в ListBox через TextBox
Всем привет! Есть такая задача, у нас есть в Форме: 4 ListBox с данными, 1 Textbox, Button Search, Listbox для результата поиска. ...

Поиск по Listbox, используя textBox
Добрый день! Знаю, что организовать поиск по листбоксу можно следующим способом: private void textBox3_TextChanged(object...

16
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
27.09.2016, 20:54
Egor2014, я б вот так сделал:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub TextBox5_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox5.TextChanged
        If TextBox5.Text = "" Then
            ListBox2.SelectedItem = Nothing
        Else
            For i = 0 To ListBox2.Items.Count - 1
                If ListBox2.Items(i).ToString.ToUpper.Contains(TextBox5.Text.ToUpper) Then
                    ListBox2.SelectedIndex = i
                    Exit For
                End If
            Next
        End If
    End Sub
Изображения
 
5
29 / 8 / 3
Регистрация: 22.10.2013
Сообщений: 447
27.09.2016, 21:03  [ТС]
Хороший код, здесь задача выполнена.
Только в списке "Москва" https://yandex.ru/yaca/geo.c2n повторяется несколько раз, может быть нужно по другому организовать поиск, чтоб находить все коды регионов и видимо выводить их в другой TextBox?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
27.09.2016, 21:50
ну выводите каку-то всплывающую подсказку со списком регионов в которых встречается слово, которое вы вводите...
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
28.09.2016, 09:47
Лучший ответ Сообщение было отмечено Egor2014 как решение

Решение

вот идеальный вариант безовсяких "велосипедов"
ListBox1 содержит полный список, в ListBox2 выводится результат поиска
VB.NET
1
2
3
4
5
6
7
8
9
10
11
        Dim s = ListBox1.Items
        Dim Zapros = From It In s
                     Where It Like "*" & TextBox1.Text & "*"
                     Order By s
                     Select It
 
        ListBox2.Items.Clear()
 
        For Each Item In Zapros
            ListBox2.Items.Add(Item)
        Next
Добавлено через 6 минут
если сортировку не нужно применять, удалите строку 4 в моей примере
3
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
28.09.2016, 10:43
ну а если нужен один листбокс, тогда хранить список где-то в переменной и заполнять ваш ListBox найденными знаечениями, в том случае, если в TextBox что-то введено, иначе выводить вечь массив на показ пользователю.
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
28.09.2016, 12:51
Yury Komar, возможно имели ввиду так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Spisok.AddRange({"Вася", "Катя", "Люся", "Надя"})
    End Sub
 
    Private Spisok As New List(Of String)
 
    Private Sub TextBox1_TextChanged_1(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim Zapros = From Item In Spisok
                     Where Item Like "*" & TextBox1.Text & "*"
                     Order By Spisok
                     Select Item
 
        ListBox1.Items.Clear()
        If Zapros.Count > 0 Then
            For Each Item In Zapros
                ListBox1.Items.Add(Item)
            Next
        End If
 
    End Sub
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
28.09.2016, 14:56
kritjara, Да, именно это... Список накладно создавать будет так как вы его создаете. Вариант хранить все в строку с разделителем и через split получать массив... Либо грузить этот список из файла, что гораздо удобнее в дальнейшем, при внесении изменений в рабочие данеые программы.
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
28.09.2016, 15:02
Yury Komar, 'nj так удобней и быстрей было написать код
любой понимающий программист список будет создавать по-своему
0
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
28.09.2016, 17:25
kritjara, добавлю в ваш код еще ложечку меда
VB.NET
1
2
3
4
Dim Zapros = From It As String In s
                     Where It.ToLower Like "*" & TextBox1.Text.ToLower & "*"
                     Order By s
                     Select It
Это сделает поиск регистронезависимым
1
6 / 10 / 4
Регистрация: 13.02.2014
Сообщений: 185
29.09.2016, 14:39
VB.NET
1
Listbox1.selectedIndex=Listbox1.FindString(TextBox1.text.Trim)
2
20 / 20 / 1
Регистрация: 06.04.2021
Сообщений: 208
16.09.2021, 22:25
Здравствуйте!
Применил код от 27.09.16. Не совсем получается. Т.е. при вводе в текстбокс выделяется только первая по порядку совпадающая строка. Например в листбоксе первым записано dsdssd и при вводе в текстбокс букв dsd она выделяется. Это хорошо. Но если где-нибудь в конце листбокса есть строка просто dsd, то она не находится, т.к. она записана в листбоксе ниже. Или например: первым записано ЛЛЛ.555.444-01 (она выделяется при вводе символов в текстбоксе), а в конце листбокса есть ЛЛЛ.555.444 (и эта запись уже не выделится). А надо найти именно её.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
 Private Sub TextBox5_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox5.TextChanged
        If TextBox5.Text = "" Then
            ListBox2.SelectedItem = Nothing
        Else
            For i = 0 To ListBox2.Items.Count - 1
                If ListBox2.Items(i).ToString.ToUpper.Contains(TextBox5.Text.ToUpper) Then
                    ListBox2.SelectedIndex = i
                    Exit For
                End If
            Next
        End If
    End Sub
Подскажите, пожалуйста, как это исправить (Пробовал не делать перевод в верхний регистр. Ещё что-то. Не помогло. По логике мы по циклу пробегаем сверху вниз и как только встретилось совпадение, то аут, как говорится. Вниз уже не идём. Может в этом дело?).
И ещё заметил, что если кликнуть по строке листбокса(сделать активным любую строку), то даже в текстбокс вводить текст не надо, а набираешь на клавиатуре и уже в листбоксе выделяется строка с нажатым на клаве символом. ???
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
17.09.2021, 04:19
Geo5, Прочтите всю тему заново, до конца, тогда найдете ответ на свой вопрос, здесь как раз ваш случай был разобран.
2
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
17.09.2021, 13:56
Цитата Сообщение от Geo5 Посмотреть сообщение
Не совсем получается.
Допустим наши строки хранятся в массиве ss тогда:
Вариант 1. Выполнили сортировку и теперь проще по первой букве найти нужную группу строк
VB.NET
1
2
Array.Sort(ss)
ListBox1.DataSource = ss
Вариант 2. Лишний TextBox на форме никому не нужен. Вместо ListBox используем ComboBox.
VB.NET
1
2
3
4
ComboBox1.DataSource = ss
ComboBox1.DropDownStyle = ComboBoxStyle.DropDown
ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
Теперь можно вводить в текстовое поле требуемые символы и будем получать список строк отвечающих введенным символам.
1
20 / 20 / 1
Регистрация: 06.04.2021
Сообщений: 208
18.09.2021, 00:34
Yury Komar, Здравствуйте! Я, наверное, не совсем корректно сформулировал задачу.
Сегодня я придумал посмотрев код вопроса Т.С. (
Цитата Сообщение от Egor2014 Посмотреть сообщение
Dim i As Integer = ListBox2.FindString(TextBox5.Text)
(ListBox2.FindString элемент начинающийся с указанной строки). И нашёл свойство ListBox2.FindStringExact(элемент ТОЧНО совпадающий с указанной строкой). Это решило (на данный момент) мою задачу(Т.к. у меня пока нет повторяющихся строк). Да, наверное, это кривое решение, но пока так. В любом случае спасибо, т.к. это дало мне толчок к какому-то решению.
VB.NET
1
2
3
4
5
6
7
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged      
       Dim i As Integer = ListBox2.FindStringExact(TextBox1.Text)
        ListBox2.SelectedIndex = i
        If TextBox1.Text = "" Then
            ListBox2.SelectedIndex = -1 
        End If
    End Sub
ovva, Здравствуйте!
Спасибо за код. И за
Цитата Сообщение от ovva Посмотреть сообщение
Лишний TextBox на форме никому не нужен. Вместо ListBox используем ComboBox.
Сейчас пробовал с массивами. Хочу ещё поразбираться. У меня же в листбоксе ноды(и какие-то несовместимости с созданием массива пошли, типа нод к стрингу нельзя). Если не разберусь, то в другой теме спрошу.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
18.09.2021, 11:34
Цитата Сообщение от Geo5 Посмотреть сообщение
У меня же в листбоксе ноды
Какие ещё ноды?
Geo5, примите за догму, что данные нельзя хранить в контролах и тогда такие конструкции у Вас появляться не будут
VB.NET
1
If ListBox2.Items(i).ToString.ToUpper.Contains(TextBox5.Text.ToUpper) Then
Что Вам пытался донести ovva, так это как раз то, что сами данные хранятся независимо от контролов (ComboBox1 или ListBox1). ComboBox1 имеет встроенные методы поиска вводимого значения, вот его-то и надо использовать. Если Вам нужно некоторое поле для контекстного поиска, то можно оставить TextBox, а отображать всё в ListBox, но тогда нужно в качестве источника данных использовать класс реализующий IList или IBindingList и настроить все привязки. Да это сложновато поначалу, но игра стоит свеч.
2
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
18.09.2021, 12:19
Цитата Сообщение от Geo5 Посмотреть сообщение
У меня же в листбоксе ноды
Полагаю, что речь идет об объектах класса Microsoft.Msagl.Drawing.Node. В принципе в предложенных вариантах мало что поменяется. Массив ss будет содержать не просто строки, а строки представляющие свойство Id объектов Node.
Вариант 1.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private nd() As DRW.Node
Private snd As DRW.Node
‘…
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ss(nd.Length - 1) As String
    For i = 0 To nd.Length - 1
        ss(i) = nd(i).Id
    Next
    Array.Sort(ss)
    ListBox1.DataSource = ss
End Sub 
‘…
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    snd = nd.Where(Function(nnd) nnd.Id = ListBox1.SelectedItem).ToArray(0)
End Sub
Вариант 2.
Расширяется абсолютно аналогично. Думаю здесь вы и сами справитесь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2021, 12:19
Помогаю со студенческими работами здесь

Поиск в ListBox через TextBox
Всем привет! Как сделать так чтобы при запуске словаря можно было выбором из ListBox сразу переводилось слово в RichBox? И можно ли сделать...

Изменение цвета поля Input при наборе текста (именно при наборе,а не при установке курсора мышки в поле Input)
Добрый день всем! Подскажите пожалуйста код, позволяющий сделать следующие действия. Есть поле Input и в нем необходимо сделать так,...

Поиск текста в содержимом TextBox и ListBox формы
Добавлено через 1 минуту KoGG, a не могли бы вы подсказать как реализовать такой же поиск, только в UserForm с Textbox и Listbox

[WPF] Поиск по ListBox, с использованием TextBox и Button
Здравствуйте. Помогите с реализацией: Есть ListBox, Button и TextBox. в поле поиска пишу к примеру: Intel, и нажать поиск. Пройдясь по...

ComboBox поиск в Items при наборе с клавиатуры
ComboBox с включенной опцией Style = csDropDownList. Хочу, когда перевожу фокус на этот ComboBox начать писать фразу, а он мне выводил...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru