листание Списка (ListBox)

Программирование на Visual Basic for Applications
dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

листание Списка (ListBox)

Сообщение dormouse » 20.08.2007 (Пн) 19:32

имеем на форме (в частности в Access'е) ListBox и поле ввода. Список наполнен большим количеством значений - значений больше, чем высота списка. Пользователь вводит в поле некоторый текст, который должен содержаться в списке. По событию Change поля происходит поиск текста в Списке и выделяется
допустим, так:

Код: Выделить всё
Private Sub Поле_Change()
For i = 0 To Me.Список.ListCount
    If Me.Список.ItemData(i) = Me.Поле.Text Then
        Me.Список.Selected(i) = True
    End If
Next
End Sub



вопрос: есть ли возможность пролистать список, чтоб показать пользователю найденную строку?
ПолеСоСписком с автоподстановкой делает тоже самое, но список без дела закрыт. А хотелось бы держать его всё время открытым.
Знаю, в дельфи, например, есть такая опция у списка.. Но опять же хотелось бы использовать стандартные контролы.

Ещё это можно реализовать, используя подчинённую табличную форму. но не хотелось бы столько городить... Хотелось бы попроще :)
VBA, MSA97

bi-lya
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 07.08.2006 (Пн) 15:36

Сообщение bi-lya » 21.08.2007 (Вт) 4:53

С Ассес дел не имею, а вообще так:
Код: Выделить всё
ListBox1.ListIndex = i

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 21.08.2007 (Вт) 16:48

не. так это свойство применять нельзя
а сам я придумал только такое:
Код: Выделить всё
Private Sub Поле_AfterUpdate()
For i = 0 To Me.Список.ListCount
    If Me.Список.ItemData(i) = Me.Поле.Text Then
        Me.Список.Selected(i) = True
        Me.Список.SetFocus
        SendKeys ("^{HOME}{DOWN " & i - 1 & "}{NUMLOCK}")
        Exit For
    End If
Next
End Sub

т.е. послать в список клавиши "перейти в начало" и "вниз n-цать раз". получилось довольно наглядно :) Но как-то не так... использовать SendKeys - что-то совсем запредельное :x
VBA, MSA97

MYF
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 12.05.2006 (Пт) 6:38
Откуда: Череповец

Сообщение MYF » 21.08.2007 (Вт) 19:09

Думаю, так будет лучше:
Код: Выделить всё
ListBox1.TopIndex = ???
- переместить окно по листингу так, чтобы вверху оказалась строка с индексом ???. Индекс считается с "0". Естественно, сначала надо "в уме" найти нужную строку.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.08.2007 (Ср) 7:36

У списка в формах Access нет свойства TopIndex.
Lasciate ogni speranza, voi ch'entrate.

Al Khamid
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 274
Зарегистрирован: 11.02.2004 (Ср) 10:00
Откуда: Москва, Ховрино

Сообщение Al Khamid » 22.08.2007 (Ср) 9:37

""
Последний раз редактировалось Al Khamid 31.10.2007 (Ср) 11:58, всего редактировалось 1 раз.
"Время пришло..." ©

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 22.08.2007 (Ср) 10:46

Если список связан с набором записей, то вполне подойдет и FindFirst, при условии, что Access == 2003...
А я все практикую лечение травами...

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 22.08.2007 (Ср) 16:37

Access97. там нет FindFirst
и вы таки не поняли суть моего вопроса. найти строчку в списке, поместить на неё фокус - это всё я могу. а чтоб список ПОКАЗАЛ эту строчку на экране.
вопщем я буду использовать свой способ, а тема - это так... мысли вслух :) Можно нафик её удалить, вообще
VBA, MSA97


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 80

    TopList