Faq поиск строки в listbox


Faq поиск строки в listbox

Уважаемые мастера прошу вас ответить на следующий вопрос
У меня в программе есть листбокс в котором мне необходимо
осуществить поиск по задонному слову и чтоб ещё и выделялся найденый текст.
Но вот только как енто реализовать я что-тоникак не пойму.

по целому слову или,скажем, поиск «123» должен выделять
«1234565» или «64351234»?

Поиск должен выделить «123»
Ну, например я ищу слово «Delphi».
Есть фраза «Delphi это среда разработки»
Поиск должен выделить так » Delphi это среда разработки»
только не жирным а цветом.
А если я ищу слово «Раз» он должен выделить»
«Delphi это среда разработки»
Во как.

Выделение с помощью OnDrawItem только устанлви стиль в lbOwnerDrawFixed

Поиск пооходишь по списку с помощью Pos

Если хочешь могу выслать работающий пример такого поиска пиши

2Леха (10.04.02 11:45)
Ваш вариант самый плохой.
Я же ему уже советовал IndexOf и LB_FINDSTRING, ему не понравилось.

>Song © (10.04.02 11:49
>Я же ему уже советовал IndexOf и LB_FINDSTRING, ему не понравилось.

Да всё мне понравилось, только я не понимаю как найденный текст выделить .

Дак так тогда и спрашивай.

Надо писать свой обработчик onDrawItem. Причём тут много гемороя, нужно часть текста выводить обычным шрифтом, часть выделенным, вообщем дерзай.

Song
а какой вариант вы можете предложить если требуется поиск по _подстроке_ IndexOf тут не поможет он ищет только строгие соответствия

2Леха (10.04.02 13:07)
А это уже уточнил MBo © (09.04.02 19:25)
Если бы так проблема стояла, то, действительно, нужен будет перебор по Pos.

>Song ©
А ты вопрорс-то правильно понял ?
Прочитай ещё разок тогда я думаю поймёшь

Song © (10.04.02 13:10)
_________________________
Читай вопрос.
_________________________

Ну, например я ищу слово «Delphi».
Есть фраза «Delphi это среда разработки»
Поиск должен выделить так » Delphi это среда разработки»
только не жирным а цветом.
А если я ищу слово «Раз» он должен выделить»
«Delphi это среда разработки»
Во как.

Конечно понял:
Вот у тебя есть 3 строки:
Маша
Наташа
Ирина

Ты ищешь по «Наташа» после поиска оно должно быть у тебя выделено. Если ты хочешь выделять жирным шрифтом то делай как я сказал. Если ты хочешь выделить «закрашенным фокусом ввода» не знаю как тебе это ещё объяснить, то тебе нужно юзать АПИ. Потому что не для первого ни для второго в классе TListBox нет встроенных средств.

Если ты хочешь просто отрисовать подстроку поиска жирным шрифтом то это графика и не более даже не очень хитрая
Если хочешь иметь возможность сразу отредактировать то проше поверх соответсвующей стороки выставить TEdit без рамки с выделением установленным по подстроке

А знаете как делает Дельфи такую же штуку в хэлпе? Он просто «выделяет» нужные части строки закрашиванием нужных участков цветом фона (синего), потом рисует вокруг них пунктирную рамку и всё!. Т.е. это делается именно так как я Вам предлагал.
Если же Вы хотите именно выделить, то EM_SETSEL, но по-моему там можно выделить только один сплошной отрывок.

>Song ©
Надо писать свой обработчик onDrawItem

Помоги плиз его написать
Хотя-бы примерно.

>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 раза, придумай сам, как быть.

procedure GirnyyPos(Text,Str:string;Canvas:TCanvas;Left,Top:integer);
var s,s1,s2,s3:string;
Tek:integer;
begin
Tek:=Left;
s:=Text;
s1:=copy(s,1,pos(Str,s)-1);
delete(s,1,pos(Str,s));
s2:=Str;
delete(s,1,length(Str));
s3:=s;
Canvas.TextOut(Tek,Top,s1);
Tek:=Tek+Canvas.TextWidth(s1);
Canvas.Font.Style:=Canvas.Font.Style+[fsBold];
Canvas.TextOut(Tek,Top,s2);
Tek:=Tek+Canvas.TextWidth(s2);
Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
Canvas.TextOut(Tek,Top,s3);
end;

Написанно за 5 минут довольно коряво и не учитывается то что подстроки может и не быть в строке но мысль думаю понятна

>Song © (10.04.02 13:37)

Вообще-то ты прав мне надо примерно такой-же поиск как и в хелпе.
Не подскажешь поподробнее как его реализовать?
И если можешь, то с примером.
Буду очень благодарен.

Ищите на предмет вхождения слова, пока не найдёте рисуйте с белым цветом фона, как только нашли изменяте на синий цвет фона и рисуйте найденное слово. Далее удаляем наденное слово из строки и снова с начала.


Нет мне надо искать именно в самом 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 рулит.

Re: Как быстро выделить все строки в ListBox
Naomi


Сообщений: 1796

Дата: 27.09.09 10:01:08

Ispol’zovat’ grid, xotja dazhe dlja grid 6200 — mnogo.

Как осуществить быстрый поиск в Listbox?

Как осуществить быстрый поиск в Listbox?

Очень просто, смотри пример.

считаем, сто есть поле Edit1, в котором набираем текст, и ListBox, в котором ищем нужную строку, (как в Нelp).

procedure TForm1.Edit1Change(Sender: TObject);

ListBox1.Perform(LB_SELECTSTRING,- 1 ,longint(Pchar(Edit1.text)));

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!

Faq поиск строки в listbox

= Мир MS Excel/Поиск по содержанию в ListBox — Мир MS Excel

Правила форума FAQ Новости сайта Новые сообщения Участники RSS

Отметить все сообщения прочитанными и перейти на главную страницу форума
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин
Мир 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.
Visible Видимость списка. True – ListBox отображается на пользовательской форме, False – ListBox скрыт.
Width Ширина элемента управления.

* При 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

Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова — «Помогите», «Спасите», «Срочно»
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос — одна тема
Прочитайте >>>правила

Как перенЕсти например 5-ю строку с ЛистБокса в поле Эдит??

Обращаю внимание на нарушение п.1 Правил раздела.
Ваше название темы «Проблема с ListBox» — бессмысленно.
Читайте правила.

22.03.2009, 13:18 #1

Кому iPhone и Swarovski, кому Афон и Саровский.

Faq поиск строки в listbox

Отказаться от выделения тысяч строк — это бессмысленно. Выделение используется единиц, максимум десятков строк.

PS Использовать грид — выделяются и тысячи записей мгновенно, но. читай п.1

22.03.2009, 13:32 #2
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 рулит.

Re: Как быстро выделить все строки в ListBox
Naomi

Сообщений: 1796

Дата: 27.09.09 10:01:08

Ispol’zovat’ grid, xotja dazhe dlja grid 6200 — mnogo.

Использование элемента управления – список (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
и код
  1. Private Sub Btnsearch_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles Btnsearch.Click

  2. Dim searchString As String = Trim(LCase(TextBox3.Text)) ‘получить строку для поиска
  3. Dim countchar As Integer = Len(searchString) ‘количество символов для сравнения
  4. Dim searchOk As Boolean = False
  5. ListBox1.SelectedItems.Clear() ‘очистить ранее выделенные строки
  6. ListBox2.Items.Clear()
  7. If countchar = 0 Then
  8. Exit Sub
  9. Else
  10. For I = 0 To ListBox1.Items.Count — 1
  11. Dim StringName As String = Trim(LCase(M >’ в этой строке ищем
  12. Dim mChar As Boolean = String .Equals(StringName, searchString) ‘ результат сравнения строк
  13. If mChar = True Then
  14. searchOk = True
  15. ListBox1.SelectedIndex = I
  16. ListBox2.Items.Add(ListBox1.Items(I))
  17. End If
  18. Next
  19. End If
  20. If Not (searchOk = True ) Then MessageBox.Show( «Строка » «» & searchString & «» » не найдена» , «» , MessageBoxButtons.OK, MessageBoxIcon.Information)
  21. End Sub

Ответить

это я понял. Спасибо.

FinfString(string s) — вернёт только первое вхождение, верно?
а как вернуть все вхождения?

Ответить

Номер ответа: 7
Автор ответа:
DimDoc

Вопросов: 21
Ответов: 104

Добавлено: 29.12.10 15:05
Номер ответа: 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
так правильно?
  1. Private Sub BtnFindString_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnFindString.Click
  2. Dim searchString As String = TextBox4.Text ‘получить строку для поиска
  3. If Not (searchString = String.Empty) Then
  4. Dim i As Integer = ListBox1.FindString(searchString)
  5. If Not (i = -1) Then
  6. ListBox1.SelectedIndex = i
  7. Else
  8. MessageBox.Show( «Строка » «» & searchString & «» » не найдена» , «» , MessageBoxButtons.OK, MessageBoxIcon.Information)
  9. End If
  10. End If
  11. End Sub

Ответить

Ответить

Номер ответа: 11
Автор ответа:
DimDoc

Вопросов: 21
Ответов: 104

Добавлено: 29.12.10 15:30
Номер ответа: 12
Автор ответа:
DimDoc

Вопросов: 21
Ответов: 104

Добавлено: 29.12.10 15:31
с

Ответить

Номер ответа: 13
Автор ответа:
EROS

Вопросов: 58
Ответов: 4245

Добавлено: 29.12.10 15:34
ну вот.. уже гораздо лучше.. только:
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
исправил.
  1. Private Sub BtnFindString_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles BtnFindString.Click
  2. Dim searchString As String = TextBox4.Text ‘получить строку для поиска
  3. ListBox1.SelectedItems.Clear() ‘очистить ранее выделенные строки
  4. If Not ( String .IsNullOrEmpty(searchString)) Then
  5. Dim i As Integer = ListBox1.FindString(searchString)
  6. If i <> ListBox.NoMatches Then
  7. ListBox1.SelectedIndex = i
  8. Else
  9. Dim outString As String = String .Format( «Строка ‘<0>‘ не найдена» , searchString)
  10. MessageBox.Show(outString, «» , MessageBoxButtons.OK, MessageBoxIcon.Information)
  11. End If
  12. End If
  13. End Sub

попробую цикл do. while

Ответить

  1. With ListBox1.Items
  2. .Add( «МП-Ком правда» )
  3. .Add( «Tanya» )
  4. .Add( «Shannon» )
  5. .
  6. .Add( «Магнолия» )
  7. .Add( «Мурка» )
  8. .Add( «Стрела» )
  9. End With

Странно что уважаемые корифеи ничего не сказали про этот кусок кода.

вместо того чтоб писать подряд кучу Add (кстати, тогда нужно до кучи вызывать и BeginUpdate/EndUpdate), достаточно один раз написать AddRange.

Faq поиск строки в listbox

Есть скрипт который выводит результат своей работы в listbox.

Если результатов слишком много то (они идут друг за другом) они выходят за правую границу бокса.

Load-Listbox -Items «$TS1 $TS2 $TS3 $TS4» -ListBox $listbox1

Пробовал вставлять `n но не помогает, в выводе результат все равно в строку. Как вариант можно раздвинуть границу бокса, но лучше все же выводить на несколько строк.

Вопрос — как мне выводить текст в listbox (или другую подобную форму) разбивая его на несколько строк?

Илон Маск рекомендует:  Что такое код getdlgitemint
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Номер ответа: 15
Автор ответа:
Artyom

Вопросов: 130
Ответов: 6596

Добавлено: 29.12.10 16:25