Уважаемые мастера прошу вас ответить на следующий вопрос У меня в программе есть листбокс в котором мне необходимо осуществить поиск по задонному слову и чтоб ещё и выделялся найденый текст. Но вот только как енто реализовать я что-тоникак не пойму.
по целому слову или,скажем, поиск «123» должен выделять «1234565» или «64351234»?
Поиск должен выделить «123» Ну, например я ищу слово «Delphi». Есть фраза «Delphi это среда разработки» Поиск должен выделить так » Delphi это среда разработки» только не жирным а цветом. А если я ищу слово «Раз» он должен выделить» «Delphi это среда разработки» Во как.
Выделение с помощью OnDrawItem только устанлви стиль в lbOwnerDrawFixed
Поиск пооходишь по списку с помощью Pos
Если хочешь могу выслать работающий пример такого поиска пиши
2Леха (10.04.02 11:45) Ваш вариант самый плохой. Я же ему уже советовал IndexOf и LB_FINDSTRING, ему не понравилось.
Ну, например я ищу слово «Delphi». Есть фраза «Delphi это среда разработки» Поиск должен выделить так » Delphi это среда разработки» только не жирным а цветом. А если я ищу слово «Раз» он должен выделить» «Delphi это среда разработки» Во как.
Конечно понял: Вот у тебя есть 3 строки: Маша Наташа Ирина
Ты ищешь по «Наташа» после поиска оно должно быть у тебя выделено. Если ты хочешь выделять жирным шрифтом то делай как я сказал. Если ты хочешь выделить «закрашенным фокусом ввода» не знаю как тебе это ещё объяснить, то тебе нужно юзать АПИ. Потому что не для первого ни для второго в классе TListBox нет встроенных средств.
Если ты хочешь просто отрисовать подстроку поиска жирным шрифтом то это графика и не более даже не очень хитрая Если хочешь иметь возможность сразу отредактировать то проше поверх соответсвующей стороки выставить TEdit без рамки с выделением установленным по подстроке
А знаете как делает Дельфи такую же штуку в хэлпе? Он просто «выделяет» нужные части строки закрашиванием нужных участков цветом фона (синего), потом рисует вокруг них пунктирную рамку и всё!. Т.е. это делается именно так как я Вам предлагал. Если же Вы хотите именно выделить, то EM_SETSEL, но по-моему там можно выделить только один сплошной отрывок.
>DeMoN-777 возможно, тебе подойдет RichEdit, т.к. в вопросе нет намеков на действия, характерные для ListBox тогда задача решается так — строки в Richedit1.Lines SS:искомая строка
with Richedit1 do begin i:=Pos(ss, Lines.Text); if i>0 then begin SelStart:=i-1; SelLength:=Length(ss); SelAttributes.Color:=clRed; end; end;
Если слово встречается более 1 раза, придумай сам, как быть.
Вообще-то ты прав мне надо примерно такой-же поиск как и в хелпе. Не подскажешь поподробнее как его реализовать? И если можешь, то с примером. Буду очень благодарен.
Ищите на предмет вхождения слова, пока не найдёте рисуйте с белым цветом фона, как только нашли изменяте на синий цвет фона и рисуйте найденное слово. Далее удаляем наденное слово из строки и снова с начала.
Нет мне надо искать именно в самом ListBox Вот этот метод мне не подходит.
procedure TForm1.ToolButton6Click(Sender: TObject); begin if edit1.text <> «» then listbox1.ItemIndex:=( listbox1.Items.IndexOf(edit1.text)) else showmessage(«Вы должны ввести текст для поиска»); end;
Так как он ищет только строгие соответствия, а мне надо чтобы поис производился как например в хелпах, то есть по строгим соответствиям а по похожим. Надеюсь я ясно изложил вопрос. Как же быть-то ?
Я же тебе отправил решение
>Леха (10.04.02 17:54) Спасибо тебе ОГРОМНОЕ. Я уже начал думать что не дано. Но ведь есть ещё люди добрые =)
unit QStrings RuleZzz тама много инересного.
Да кстати, вопрос закрыт на все 100%
Faq поиск строки в listbox
Отказаться от выделения тысяч строк — это бессмысленно. Выделение используется единиц, максимум десятков строк.
PS Использовать грид — выделяются и тысячи записей мгновенно, но. читай п.1
Re: Как быстро выделить все строки в ListBox
Borshenko Автор
Сообщений: 1767 Откуда: Chernigiv
Дата: 25.09.09 14:34:19
Re: Как быстро выделить все строки в ListBox
Владимир Максимов
Сообщений: 13846 Откуда: Москва
Дата: 25.09.09 14:39:44
Стандартный прием — скрыть объект, поскольку основное время тратится не на выделение, а на отображение этого выделения. Скрытый объект не отображается, поэтому экономим время на визуализации процесса
Хотя, согласен с XAndy. Сама постановка задачи странная. Такого следует по возможности избегать
Re: Как быстро выделить все строки в ListBox
Borshenko Автор
Сообщений: 1767 Откуда: Chernigiv
Дата: 25.09.09 14:43:23
Re: Как быстро выделить все строки в ListBox
matod
Сообщений: 3057 Откуда: Иркутск
Дата: 25.09.09 15:35:00
Раз есть кнопка «выделить все» то зачем все отмечать? Вам ведь важен только факт, что выделены все, врядли пользователь пожелает после нажатия на эту кнопку проверять все 6400 записей, все ли помечены. Можно например, при нажатии на эту кнопку сделать список недоступным и установить признак (например, спец. свойством формы) что выбраны все. Обычно и дальнейшая обработка упрощается.
Есть и другие варианты. Например, переключатель: «Все»-«выборочно». В первом случае список не показывается, во втором — да. Ну и др. — можно пофантазировать.
Но это всё удобно, только когда типичный сценарий — либо выбрать всех, либо несколько. Пердставьте ситуацию, если в Вашем интерфейсе пользователю понадобится выделить каждого второго (или по какому-то другому критерию половину записей) — 3200 щелчков мышью + прокрутка списка — так незаметно рабочий день и закончился.
Re: Как быстро выделить все строки в ListBox
Влад Колосов
Сообщений: 22664 Откуда: Ростов-на-Дону
Дата: 25.09.09 17:31:22
Листбокс на 6200 строк при использовании СУБД — нонсенс полный. Т.к. человек никогда не будет в состоянии просмотреть каждую строку для анализа. Необходимо использовать выборки до ограничения этого числа разумным значением. Что касается экспорта данных, то для задания параметров экспорта создается отдельная форма.
Re: Как быстро выделить все строки в ListBox
milly
Сообщений: 58
Дата: 25.09.09 18:41:30
А какого характера список, что нём отображается (содержится)? Как верно сказали, такой огромный нужен ли?!
К примеру в базе данные о жилом фонде города. 64 улицы, 900 домов, 26000 квартир. Делаю так. В форме поиска нужного дома список улиц — 64 строки. Выбираем улицу — рядом в listbox отображаются дома этой улицы, далее выбираем дом — отображаются квартиры этого дома. SELECT рулит.
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск по содержанию в ListBox (Макросы/Sub)
Поиск по содержанию в ListBox
Stormy
Дата: Пятница, 15.12.2020, 16:22 | Сообщение № 1
Место для рекламы.
Ответить
sboy
Дата: Пятница, 15.12.2020, 16:25 | Сообщение № 2
Яндекс: 410016850021169
Ответить
Stormy
Дата: Суббота, 16.12.2020, 08:13 | Сообщение № 3
Место для рекламы.
Ответить
nilem
Дата: Суббота, 16.12.2020, 08:33 | Сообщение № 4
Яндекс.Деньги 4100159601573
Ответить
Stormy
Дата: Суббота, 16.12.2020, 09:22 | Сообщение № 5
nilem, Здравствуйте, Николай. Спасибо за разъяснения.
Скачал тут пример, но хоть убей не могу найти с какой темы. В принципе все подходит. с комбобоксом проблем нет. Возможно ли его переделать под текстбокс и листбокс?
Private Sub cmbStrat_Change() Dim a cmbStrat.List = [ComboData].Value a = Application.Transpose(cmbStrat.List) If cmbStrat.Value = «» Then cmbStrat.List = [ComboData].Value Else a = Filter(a, cmbStrat.Value, True, vbTextCompare) cmbStrat.List = a End If End Sub
Private Sub cmbStrat_GotFocus() cmbStrat.List = [ComboData].Value End Sub
Private Sub txtStrat_Change() Dim a lstStrat.List = [ComboData].Value a = Application.Transpose(lstStrat.List) If txtStrat.Value = «» Then lstStrat.List = [ComboData].Value Else a = Filter(a, lstStrat.Value, True, vbTextCompare) lstStrat.List = a End If End Sub
Private Sub txtStrat_GotFocus() lstStrat.List = [ComboData].Value End Sub
nilem, Здравствуйте, Николай. Спасибо за разъяснения.
Скачал тут пример, но хоть убей не могу найти с какой темы. В принципе все подходит. с комбобоксом проблем нет. Возможно ли его переделать под текстбокс и листбокс?
Private Sub cmbStrat_Change() Dim a cmbStrat.List = [ComboData].Value a = Application.Transpose(cmbStrat.List) If cmbStrat.Value = «» Then cmbStrat.List = [ComboData].Value Else a = Filter(a, cmbStrat.Value, True, vbTextCompare) cmbStrat.List = a End If End Sub
Private Sub cmbStrat_GotFocus() cmbStrat.List = [ComboData].Value End Sub
Private Sub txtStrat_Change() Dim a lstStrat.List = [ComboData].Value a = Application.Transpose(lstStrat.List) If txtStrat.Value = «» Then lstStrat.List = [ComboData].Value Else a = Filter(a, lstStrat.Value, True, vbTextCompare) lstStrat.List = a End If End Sub
Private Sub txtStrat_GotFocus() lstStrat.List = [ComboData].Value End Sub
Место для рекламы.
Сообщение nilem, Здравствуйте, Николай. Спасибо за разъяснения.
Скачал тут пример, но хоть убей не могу найти с какой темы. В принципе все подходит. с комбобоксом проблем нет. Возможно ли его переделать под текстбокс и листбокс?
Private Sub cmbStrat_Change() Dim a cmbStrat.List = [ComboData].Value a = Application.Transpose(cmbStrat.List) If cmbStrat.Value = «» Then cmbStrat.List = [ComboData].Value Else a = Filter(a, cmbStrat.Value, True, vbTextCompare) cmbStrat.List = a End If End Sub
Private Sub cmbStrat_GotFocus() cmbStrat.List = [ComboData].Value End Sub
Private Sub txtStrat_Change() Dim a lstStrat.List = [ComboData].Value a = Application.Transpose(lstStrat.List) If txtStrat.Value = «» Then lstStrat.List = [ComboData].Value Else a = Filter(a, lstStrat.Value, True, vbTextCompare) lstStrat.List = a End If End Sub
Private Sub txtStrat_GotFocus() lstStrat.List = [ComboData].Value End Sub
Stormy
Дата: Суббота, 16.12.2020, 15:20 | Сообщение № 6
С фильтром частично разобрался, но теперь беда в другом. При вводе букв/слов , которых нет в списке выдает ошибку. Как ее отловить , к примеру при вводе zzzzz не фильтровать или вывести msgbox ?
С фильтром частично разобрался, но теперь беда в другом. При вводе букв/слов , которых нет в списке выдает ошибку. Как ее отловить , к примеру при вводе zzzzz не фильтровать или вывести msgbox ?
Место для рекламы.
Сообщение С фильтром частично разобрался, но теперь беда в другом. При вводе букв/слов , которых нет в списке выдает ошибку. Как ее отловить , к примеру при вводе zzzzz не фильтровать или вывести msgbox ?
UPD: Разобрался Автор — Stormy Дата добавления — 16.12.2020 в 15:20
VBA Excel. Элемент управления ListBox (список)
Элемент управления пользовательской формы ListBox для выбора и ввода информации в VBA Excel. Свойства списка, его заполнение, извлечение данных, примеры кода.
Элемент управления ListBox
UserForm.ListBox – это элемент управления пользовательской формы, предназначенный для передачи в код VBA информации, выбранной пользователем из одностолбцового или многостолбцового списка.
Список используется в тех случаях, когда необходимо добавить в форму информацию, которая заранее известна, а ее отдельные позиции можно сгруппировать в список. Элемент управления ListBox оправдывает себя при небольших списках, так как большой список будет занимать много места на форме.
Использование полос прокрутки уменьшает преимущество ListBox перед элементом управления ComboBox, которое заключается в том, что при открытии формы все позиции для выбора на виду без дополнительных действий со стороны пользователя. При выборе информации из большого списка удобнее использовать ComboBox.
Элемент управления ListBox позволяет выбрать несколько позиций из списка, но эта возможность не имеет практического смысла. Ввести информацию в ListBox с помощью клавиатуры или вставить из буфера обмена невозможно.
Свойства списка
Свойство
Описание
ColumnCount
Указывает количество столбцов в списке. Значение по умолчанию = 1.
ColumnHeads
Добавляет строку заголовков в ListBox. True – заголовки столбцов включены, False – заголовки столбцов выключены. Значение по умолчанию = False.
ColumnWidths
Ширина столбцов. Значения для нескольких столбцов указываются в одну строку через точку с запятой (;).
ControlSource
Ссылка на ячейку для ее привязки к элементу управления ListBox.
ControlTipText
Текст всплывающей подсказки при наведении курсора на ListBox.
Enabled
Возможность выбора элементов списка. True – выбор включен, False – выключен*. Значение по умолчанию = True.
Font
Шрифт, начертание и размер текста в списке.
Height
Высота элемента управления ListBox.
Left
Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления ListBox.
List
Позволяет заполнить список данными из одномерного или двухмерного массива, а также обращаться к отдельным элементам списка по индексам для записи и чтения.
ListIndex
Номер выбранной пользователем строки. Нумерация начинается с нуля. Если ничего не выбрано, ListIndex = -1.
Locked
Запрет возможности выбора элементов списка. True – выбор запрещен**, False – выбор разрешен. Значение по умолчанию = False.
MultiSelect***
Определяет возможность однострочного или многострочного выбора. (fmMultiSelectSingle) – однострочный выбор, 1 (fmMultiSelectMulti) и 2 (fmMultiSelectExtended) – многострочный выбор.
RowSource
Источник строк для элемента управления ListBox (адрес диапазона на рабочем листе Excel).
TabIndex
Целое число, определяющее позицию элемента управления в очереди на получение фокуса при табуляции. Отсчет начинается с 0.
Text
Текстовое содержимое выбранной строки списка (из первого столбца при ColumnCount > 1). Тип данных String, значение по умолчанию = пустая строка.
TextAlign
Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top
Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления ListBox.
Value
Значение выбранной строки списка (из первого столбца при ColumnCount > 1). Value – свойство списка по умолчанию. Тип данных Variant, значение по умолчанию = Null.
* При Enabled в значении False возможен только вывод информации в список для просмотра. ** Для элемента управления ListBox действие свойства Locked в значении True аналогично действию свойства Enabled в значении False. *** Если включен многострочный выбор, свойства Text и Value всегда возвращают значения по умолчанию (пустая строка и Null).
В таблице перечислены только основные, часто используемые свойства списка. Еще больше доступных свойств отображено в окне Properties элемента управления ListBox, а все методы, события и свойства – в окне Object Browser.
Вызывается Object Browser нажатием клавиши «F2». Слева выберите объект ListBox, а справа смотрите его методы, события и свойства.
Свойства BackColor, BorderColor, BorderStyle отвечают за внешнее оформление списка и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления ListBox на проекте пользовательской формы.
Способы заполнения ListBox
Используйте метод AddItem для загрузки элементов в список по одному:
Используйте свойство List, чтобы скопировать одномерный массив значений в элемент управления ListBox.
Вместо функции Array можно использовать переменные одномерных и двухмерных массивов. При загрузке значений из двухмерного массива, требуется предварительно указать количество столбцов в списке.
Используйте свойство RowSource, чтобы загрузить в список значения из диапазона ячеек рабочего листа:
При загрузке данных из диапазона, содержащего более одного столбца, требуется предварительно указать количество столбцов в списке:
В качестве имени листа используется имя ярлыка. Если имя листа содержит пробелы, оно заключается в одинарные кавычки.
Подробнее о заполнении элемента управления ListBox вы можете ознакомиться в отдельной статье с наглядными примерами.
Привязка списка к ячейке
Для привязки списка к ячейке на рабочем листе используется свойство ControlSource. Суть привязки заключается в том, что при выборе строки в элементе управления, значение свойства Value копируется в привязанную ячейку.
Если привязанная к списку ячейка содержит значение одной из строк элемента управления ListBox, то при запуске пользовательской формы список откроется с выделенной строкой, содержащей это значение. Если привязанная ячейка при загрузке формы пустая, то список откроется без выделения какой-либо строки.
В случае, когда при открытии формы в привязанной к списку ячейке содержится значение, которого нет ни в одной из строк элемента управления ListBox, будет сгенерирована ошибка.
Привязать ячейку к списку можно, указав адрес ячейки в поле свойства ControlSource в окне Properties элемента управления ListBox. Или присвоить адрес ячейки свойству ControlSource в коде VBA Excel:
Теперь значение выбранной строки в списке автоматически копируется в ячейку «A2» на листе «Лист1»:
В окне Properties адрес указывается без двойных кавычек. Если имя листа содержит пробелы, оно заключается в одинарные кавычки.
Извлечение информации из списка
Первоначально элемент управления ListBox открывается со строками, ни одна из которых не выбрана. При выборе (выделении) строки, ее значение записывается в свойства Value и Text.
Из этих свойств мы с помощью кода VBA Excel извлекаем информацию, выбранную в списке пользователем:
Вторую строку кода можно записать myVar = UserForm1.ListBox1 , так как Value является свойством списка по умолчанию.
Если ни одна позиция в списке не выбрана, свойство Value возвращает значение Null, а свойство Text – пустую строку. Если выбрана строка в многостолбцовом списке, в свойства Value и Text будет записана информация из первого столбца.
Что делать, если понадобятся данные из других столбцов многостолбцового списка, кроме первого?
Для получения данных из любого столбца элемента управления ListBox используется свойство List, а для определения выбранной пользователем строки – ListIndex.
Для тестирования приведенного ниже кода скопируйте таблицу и вставьте ее в диапазон «A1:D4» на листе с ярлыком «Лист1»:
Звери
Лев
Тапир
Вивера
Птицы
Грач
Сорока
Филин
Рыбы
Карась
Налим
Парусник
Насекомые
Оса
Жук
Муравей
Создайте в редакторе VBA Excel пользовательскую форму и добавьте на нее список с именем ListBox1. Откройте модуль формы и вставьте в него следующие процедуры:
В процедуре UserForm_Initialize() присваиваем значения некоторым свойствам элемента управления ListBox1 перед открытием пользовательской формы. Процедура UserForm_Click() при однократном клике по форме выводит в MsgBox значение из третьего столбца выделенной пользователем строки.
Теперь при выборе строки в списке, значение свойства Value будет записываться в ячейку «F1», а при клике по форме функция MsgBox выведет значение третьего столбца выделенной строки.
Обратите внимание, что при первом запуске формы, когда ячейка «F1» пуста и ни одна строка в ListBox не выбрана, клик по форме приведет к ошибке. Это произойдет из-за того, что свойство ListIndex возвратит значение -1, а это недопустимый номер строки для свойства List.
Если для списка разрешен многострочный выбор (MultiSelect = fmMultiSelectMulti или MultiSelect = fmMultiSelectExtended), тогда, независимо от количества выбранных строк, свойство Value будет возвращать значение Null, а свойство Text – пустую строку. Свойство ListIndex будет возвращать номер строки, которую кликнули последней, независимо от того, что это было – выбор или отмена выбора.
Иногда перед загрузкой в ListBox требуется отобрать уникальные элементы из имеющегося списка. Смотрите, как это сделать с помощью объектов Collection и Dictionary.
Faq поиск строки в listbox
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Форум программистов > Delphi > Общие вопросы Delphi
Как получить текст из любой строки ListBox
Регистрация
Поиск по форуму
Расширенный поиск
К странице.
Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда — alarforum@yandex.ru
Ваша тема закрыта, почему это могло произойти? Возможно, Название темы включает слова — «Помогите», «Спасите», «Срочно» Название темы не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос — одна тема Прочитайте >>>правила
22.03.2009, 13:18
#1
Как перенЕсти например 5-ю строку с ЛистБокса в поле Эдит??
Обращаю внимание на нарушение п.1 Правил раздела. Ваше название темы «Проблема с ListBox» — бессмысленно. Читайте правила.
22.03.2009, 13:32
#2
Кому iPhone и Swarovski, кому Афон и Саровский.
Faq поиск строки в listbox
Отказаться от выделения тысяч строк — это бессмысленно. Выделение используется единиц, максимум десятков строк.
PS Использовать грид — выделяются и тысячи записей мгновенно, но. читай п.1
Re: Как быстро выделить все строки в ListBox
Borshenko Автор
Сообщений: 1767 Откуда: Chernigiv
Дата: 25.09.09 14:34:19
Re: Как быстро выделить все строки в ListBox
Владимир Максимов
Сообщений: 13846 Откуда: Москва
Дата: 25.09.09 14:39:44
Стандартный прием — скрыть объект, поскольку основное время тратится не на выделение, а на отображение этого выделения. Скрытый объект не отображается, поэтому экономим время на визуализации процесса
Хотя, согласен с XAndy. Сама постановка задачи странная. Такого следует по возможности избегать
Re: Как быстро выделить все строки в ListBox
Borshenko Автор
Сообщений: 1767 Откуда: Chernigiv
Дата: 25.09.09 14:43:23
Re: Как быстро выделить все строки в ListBox
matod
Сообщений: 3057 Откуда: Иркутск
Дата: 25.09.09 15:35:00
Раз есть кнопка «выделить все» то зачем все отмечать? Вам ведь важен только факт, что выделены все, врядли пользователь пожелает после нажатия на эту кнопку проверять все 6400 записей, все ли помечены. Можно например, при нажатии на эту кнопку сделать список недоступным и установить признак (например, спец. свойством формы) что выбраны все. Обычно и дальнейшая обработка упрощается.
Есть и другие варианты. Например, переключатель: «Все»-«выборочно». В первом случае список не показывается, во втором — да. Ну и др. — можно пофантазировать.
Но это всё удобно, только когда типичный сценарий — либо выбрать всех, либо несколько. Пердставьте ситуацию, если в Вашем интерфейсе пользователю понадобится выделить каждого второго (или по какому-то другому критерию половину записей) — 3200 щелчков мышью + прокрутка списка — так незаметно рабочий день и закончился.
Re: Как быстро выделить все строки в ListBox
Влад Колосов
Сообщений: 22664 Откуда: Ростов-на-Дону
Дата: 25.09.09 17:31:22
Листбокс на 6200 строк при использовании СУБД — нонсенс полный. Т.к. человек никогда не будет в состоянии просмотреть каждую строку для анализа. Необходимо использовать выборки до ограничения этого числа разумным значением. Что касается экспорта данных, то для задания параметров экспорта создается отдельная форма.
Re: Как быстро выделить все строки в ListBox
milly
Сообщений: 58
Дата: 25.09.09 18:41:30
А какого характера список, что нём отображается (содержится)? Как верно сказали, такой огромный нужен ли?!
К примеру в базе данные о жилом фонде города. 64 улицы, 900 домов, 26000 квартир. Делаю так. В форме поиска нужного дома список улиц — 64 строки. Выбираем улицу — рядом в listbox отображаются дома этой улицы, далее выбираем дом — отображаются квартиры этого дома. SELECT рулит.
Использование элемента управления – список (ListBox)
Приведем часто используемые свойства элемента управления ListBox (cписок), применяемого для хранения списка значений. Из списка пользователь может выбрать одно или несколько значений, которые в последующем будут использоваться в тексте программы (таблица 4.6).
Таблица 4.6 –Основные свойства элемента управления ListBox
Свойство
Описание
ListIndex
Возвращает номер текущего элемента списка. Нумерация элементов списка начинается с нуля
ListCount
Возвращает число элементов списка
TopIndex
Возвращает элемент списка с наибольшим номером
ColumnCount
Устанавливает число столбцов в списке
TextColumn
Устанавливает столбец в списке, элемент которого возвращается свойством Text
Enabled
Допустимые значения: True (запрещен выбор значения из списка пользователем) и False (в противном случае)
Text
Возвращает выбранный в списке элемент
List
Возвращает элемент списка, стоящий на пересечении указанной строки и столбца: List(row, column)
RowSource
Устанавливает диапазон, содержащий элементы списка
ControlSource
Устанавливает диапазон (ячейку), куда возвращается выбранный элемент из списка
MultiSelect
Устанавливает способ выбора элементов списка. Допустимые значения: — fmMultiSelectSingle (выбор только одного элемента); — fmMultiSelectMulti (разрешен выбор нескольких элементов посредством либо щелчка, либо нажатием клавиши ); — fmMultiSelectExtended (разрешено использование клавиши при выборе ряда последовательных элементов списка)
Selected
Допустимые значения: True (если элемент списка выбран) и False (в противном случае). Используется для определения выделенного текста, когда свойство MultiSelect имеет значение fmMultiSelect-Multi или fmMultiSelectExtended.
ColumnWidths
Устанавливает ширину столбцов списка. Синтаксис: ColumnW End With
ColumnHeads
Допустимые значения: True (выводятся заголовки столбцов раскрывающегося списка) и False (в противном случае)
ListStyle
Устанавливает способ выделения выбранных элементов. Допустимые значения: — fmListStylePlain (выбранный элемент из списка выделяется цветом); — fmListStyleOption (перед каждым элементом в списке располагается флажок и выбор элемента из списка соответствует установке этого флажка)
MatchEntry
Выводит первый подходящий элемент из списка при наборе его имени на клавиатуре. Допустимые значения: — fmMatchEntryNone (режим вывода подходящего элемента в списке отключен); — fmMatchEntryFirstLetter (выводит подходящий элемент по набранной первой букве. В этом случае, предпочтительно, чтобы элементы списка были бы упорядочены в алфавитном порядке); — fmMatchEntryComplete (выводит подходящий элемент по полному набранному имени)
BoundColumn
Устанавливает тип, возвращаемый свойством Value. А именно, если свойство BoundColumn равно 0, то свойство Value возвращает индекс выбранной строки, т. е. в этом случае оно действует как свойство ListIndex. Если свойство BoundColumn принимает значение из диапазона от 1 до количества столбцов в списке, то свойство Value возвращает элемент из выбранной строки, стоящий в столбце, определенном свойством BoundColumn
Наиболее часто используемые методы элемента управления ListBox приведены в таблице 4.7.
Таблица 4.7 –Методы элемента управления ListBox
Метод
Описание
Clear
Удаляет все элементы из списка
RemoveItem
Удаляет из списка элемент с указанным номером. Синтаксис: RemoveItem (index), где index – номер удаляемого из списка элемента
AddItem
Добавляет элемент в список. Синтаксис: AddItem ( [ Item [, varIndex]]), где Item – элемент (строковое выражение), добавляемый в список varIndex – номер добавляемого элемента
Для заполнения списка можно воспользоваться одним из следующих способов:
1) Поэлементно, если список состоит из одной колонки.
2) Массивом, если список состоит из одной колонки.
Faq поиск строки в listbox
Дружище, в NET не принято юзать ф-ции усаревшего языка.. я говорю о Trim,LCase,Mid и т.д.. Кроме того ты используешь тупой перебор, а это есть некорректно.. Если бы удосужился взглянуть на документацию ты бы обнаружил там как минимум 2 метода с 2 перегрузками каждый которые предназначены для поиска строки в ListBox
public int FindString(string s) Member of System.Windows.Forms.ListBox Summary: Finds the first item in the System.Windows.Forms.ListBox that starts with the specified string. Parameters: s: The text to search for. Return Values: The zero-based index of the first item found; returns ListBox.NoMatches if no match is found.
public int FindStringExact(string s) Member of System.Windows.Forms.ListBox
Summary: Finds the first item in the System.Windows.Forms.ListBox that exactly matches the specified string.
Ответить
Номер ответа: 6 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
Добавлено: 29.12.10 14:59
чтобы выделялась найденная строка. установите свойство listbox1.SelectionMode = MultiExtended и код
Private Sub Btnsearch_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles Btnsearch.Click
Dim searchString As String = Trim(LCase(TextBox3.Text)) ‘получить строку для поиска
Dim countchar As Integer = Len(searchString) ‘количество символов для сравнения
Dim searchOk As Boolean = False
ListBox1.SelectedItems.Clear() ‘очистить ранее выделенные строки
ListBox2.Items.Clear()
If countchar = 0 Then
Exit Sub
Else
For I = 0 To ListBox1.Items.Count — 1
Dim StringName As String = Trim(LCase(M >’ в этой строке ищем
Dim mChar As Boolean = String .Equals(StringName, searchString) ‘ результат сравнения строк
If mChar = True Then
searchOk = True
ListBox1.SelectedIndex = I
ListBox2.Items.Add(ListBox1.Items(I))
End If
Next
End If
If Not (searchOk = True ) Then MessageBox.Show( «Строка » «» & searchString & «» » не найдена» , «» , MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Ответить
Номер ответа: 7 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
Добавлено: 29.12.10 15:05
это я понял. Спасибо.
FinfString(string s) — вернёт только первое вхождение, верно? а как вернуть все вхождения?
Ответить
Номер ответа: 8 Автор ответа: EROS
Вопросов: 58 Ответов: 4245
Добавлено: 29.12.10 15:07
))) опять ты за свое.
Ответить
Номер ответа: 9 Автор ответа: EROS
Вопросов: 58 Ответов: 4245
Добавлено: 29.12.10 15:11
Ответить
Номер ответа: 10 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
Добавлено: 29.12.10 15:28
так правильно?
Private Sub BtnFindString_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnFindString.Click
Dim searchString As String = TextBox4.Text ‘получить строку для поиска
If Not (searchString = String.Empty) Then
Dim i As Integer = ListBox1.FindString(searchString)
ну вот.. уже гораздо лучше.. только: 1. вместо If Not (searchString = String.Empty) Then используй String.IsNullOrEmpty 2. вместо If Not (i = -1) Then используй ListBox.NoMatches (так понятнее) 3. вместо «Строка «»» & searchString & «»» не найдена» используй String.Format
Ответить
Номер ответа: 14 Автор ответа: DimDoc
Вопросов: 21 Ответов: 104
Добавлено: 29.12.10 16:10
исправил.
Private Sub BtnFindString_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnFindString.Click
Dim searchString As String = TextBox4.Text ‘получить строку для поиска
ListBox1.SelectedItems.Clear() ‘очистить ранее выделенные строки
If Not ( String .IsNullOrEmpty(searchString)) Then
Dim i As Integer = ListBox1.FindString(searchString)
If i <> ListBox.NoMatches Then
ListBox1.SelectedIndex = i
Else
Dim outString As String = String .Format( «Строка ‘<0>‘ не найдена» , searchString)
Пробовал вставлять `n но не помогает, в выводе результат все равно в строку. Как вариант можно раздвинуть границу бокса, но лучше все же выводить на несколько строк.
Вопрос — как мне выводить текст в listbox (или другую подобную форму) разбивая его на несколько строк?