Aptem |
Отправлено: 19.03.2004, 04:36 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Привет, народ!
У меня такая проблема:
На форме есть ListBox, в нем предположим строк 300, например, названия фильмов ( все отсортировано ). Под ListBox'ом находится Edit. Если я пишу в Edit букву 'Б', то в ListBox'е курсор ( синяя полоска ) устанавливается на первом фильме, начинающейся с буквы 'Б'. Если я продолжаю вводить буквы и ввожу букву 'У' ( то есть получается 'БУ' ), то в курсор устанавливается уже на фильмах, где первая и вторая буква соответсвенно 'Б' и 'У', то есть 'БУ'. И так далее... Вообщем, как в любом help'е.
Надеюсь все понятно...
А теперь вопрос: КАК ЭТО ВСЕ СДЕЛАТЬ ????
Огромное всем спасибо за внимание. Надеюсь на помощь!
Отредактировано Aptem — 19/03/2004, 05:41
|
|
Gedeon |
Отправлено: 19.03.2004, 14:34 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
А каким образом заносятся данные в ListBox?
|
|
th1nG |
Отправлено: 19.03.2004, 20:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
QUOTE (Gedeon @ 19/03/2004, 15:36) | А каким образом заносятся данные в ListBox? |
ListBox1->Items->Add("Какойто текст");
Артём, пробуй так:
CODE |
//--------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(ListBox1->Items->Count > 0)
{//если в списке чото есть
for(int i=0;i<ListBox1->Items->Count;i++)//начинаем перебирать список
{
if(ListBox1->Items->Strings[i].SubString(0,Edit1->Text.Length()) == Edit1->Text)//если первые буквы элемента списка и строки ввода совпадают:
{
ListBox1->Selected[i] = true;///выделяем этот элемент
}
else //иначе(если нет таких)
{
ListBox1->Selected[i] = false;//не выделено. =))
}
}
}
}
//---------------------------- |
|
|
th1nG |
Отправлено: 19.03.2004, 20:27 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
забыл сказать.. поставь MultySelect = true
|
|
th1nG |
Отправлено: 19.03.2004, 20:29 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
будет выглядеть так..
Присоединить изображение
|
|
Aptem |
Отправлено: 22.03.2004, 04:15 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Все просто супер, то что надо... ОГРОМНОЕ СПАСИБО th1nG ! Работает как часы !!!
|
|
darek |
Отправлено: 25.03.2004, 20:39 |
|
Не зарегистрирован
|
Спасибо всем большое кто помог. Но есть ещё одна проблема: Как имитировать нажатие крысой на выделенные поиском объекты в ListBox'e ? |
|
th1nG |
Отправлено: 25.03.2004, 22:44 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
хм.. не много не догнал..
т.е. как тока часть текста элемента листбокса совпадает с текстом строки ввода??
если так то просто обрабатывай это событие..
т.е. делай не Items->Selected[int] == true; а любой обработчик..
>> в тваём случае ListBox1->Click(); или както так..
опишы подробнее чо именно ты хочеш реализовать.
|
|
** Darek |
Отправлено: 26.03.2004, 21:32 |
|
Не зарегистрирован
|
с тем я уже разобрался. Но есть ещё одна небольшая проблема: ну написал я в поиксе то, что мне надо, он нашёл. Но ведь можно вводить и не полное слово а только часть. И что надо написать чтобы когда написал не полное слово, он в Edit'e написал полное, т.е. как на самом деле написано в ListBox'e. Спасибо! |
|
th1nG |
Отправлено: 28.03.2004, 08:06 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 31
|
CODE |
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(ListBox1->Items->Count > 0)
{//если в списке чото есть
for(int i=0;i<ListBox1->Items->Count;i++)//начинаем перебирать список
{
if(ListBox1->Items->Strings[i].SubString(0,Edit1->Text.Length()) == Edit1->Text)//если первые буквы элемента списка и строки ввода совпадают:
{
ListBox1->Selected[i] = true;///выделяем этот элемент
//если нашлось явно то что нада :)
if(ListBox1->SelCount == 1)
{
Edit1->Text = ListBox1->Items->Strings[i]; // вроде всё.
}
}
else //иначе(если нет таких)
{
ListBox1->Selected[i] = false;//не выделено. =))
}
}
}
}
//----------------------------
|
Отредактировано th1nG — 28/03/2004, 09:13
|
|