навигация по списку

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

навигация по списку

Сообщение pstrkim » 03.01.2007 (Ср) 23:56

Программа навигации по списку с вводом символов с клавиатуры:
Код: Выделить всё

Dim sLstSearch As String 'строка поиска
Dim CurrentLetter As String 'загруженная в список буква
Dim sWaitForLetter As String 'выбранная, но еще незагруженная буква
'загрузка формы
Private Sub Form_Load()
    While Not rsProducts.EOF
        lstSearch.AddItem rsProducts.Fields("ProductID")
        rsProducts.MoveNext
    Wend
    rsProducts.Close
    Me.Caption = lstSearch.ListCount & " records loaded"
End Sub
'функция поиска слова в списке
Function SearchListBox(lstX As Control, KeyAscii As Integer)
    Dim nSearchPos As Integer
    Dim nSearchLen As Integer
    Dim nResult As Integer
    CurrentLetter = ""
   
    If CurrentLetter = "" Then
        CurrentLetter = "Я"
    Else
        CurrentLetter = Chr(Asc(CurrentLetter) + 1)
    End If
   
    nSearchPos = lstX.ListIndex
    nSearchLen = Len(sLstSearch)
    sWaitForLetter = ""
   
    'проверям не нажата ли клавиша <BACKSPACE>
    If KeyAscii = vbKeyBack Then
        nSearchPos = 0
        If nSearchLen > 0 Then sLstSearch = Left$(sLstSearch, _
                    nSearchLen - 1)
    End If
   
    'преобразуем введеный символ в верхний регистр
    KeyAscii = Asc(UCase$(Chr$(KeyAscii)))
   
    'если нажата буква 'Х', а данные введены только до 'С', ждем...
    If nSearchLen = 0 And KeyAscii > Asc(CurrentLetter) Then
        lstX.ListIndex = lstX.ListCount - 1
        sWaitForLetter = Chr$(KeyAscii)
        Exit Function
    End If
   
    'добавляем в строку поиска новый символ
    If KeyAscii >= 32 And KeyAscii <= 223 Then
        sLstSearch = sLstSearch & Chr$(KeyAscii)
    End If
   
    'отображаем строку поиска
    lblSrchtext = sLstSearch
   
    'пересчитываем длину
    nSearchLen = Len(sLstSearch)
   
    'простой поиск - сравниваем каждый элемент со строкой поиска
    While nSearchPos < lstX.ListCount
        nResult = StrComp(sLstSearch, UCase$(Left$(lstX.List(nSearchPos), nSearchLen)))
        If nResult <= 0 Then
            lstX.ListIndex = nSearchPos
            SearchListBox = 0
            Exit Function
        End If
        nSearchPos = nSearchPos + 1
    Wend
End Function
'нажатие клавиши в списке
Private Sub lstSearch_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Exit Sub
    End If
    KeyAscii = SearchListBox(Me.ActiveControl, KeyAscii)
End Sub
Последний раз редактировалось pstrkim 06.01.2007 (Сб) 0:02, всего редактировалось 2 раз(а).

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.01.2007 (Чт) 1:02

Для начала - оформить приложенный код как следует с тегом Code либо VB и табуляциями (4 пробела):

Код: Выделить всё
Private Sub lstSearch_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then Exit Sub
    KeyAscii = SearchListBox(Me.ActiveControl, KeyAscii)
End Sub


Пока что невозможно читать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.01.2007 (Чт) 6:48

Для простоты listbox замени на combo со стилем simple, после чего http://bbs.vbstreets.ru/viewtopic.php?t=13462
Можно не заменять, а подправить пример.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Сообщение pstrkim » 04.01.2007 (Чт) 13:57

Ничего не понял как оформить код и отступы - теги я ввел, пробелы тоже никакого результата!
Попытался написать более понятно, с комментариями

[Ещё один длинный кусок неотформатированного кода, теперь удалённый]

Помогите разобраться! :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.01.2007 (Чт) 14:02

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

pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Сообщение pstrkim » 04.01.2007 (Чт) 14:31

Все, понял, спасибо!

[Здесь снова был повторно запощенный кусок кода. Тот же самый. Видимо, автор насколько в восторге от него, что не может упустить возможности показать его у каждом посте...

Автор, воспользуйся кнопкой Правка и приведи свой код в первом посте в нормальный вид, вместо того чтобы уже в третий раз повторно являть его нам.]

pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Сообщение pstrkim » 04.01.2007 (Чт) 21:20

А где здесь кнопка Правка?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.01.2007 (Пт) 6:59

pstrkim писал(а):А где здесь кнопка Правка?


В цитаты однозначно!!!

А кнопка сия находится в правом верхнем углу каждого твоего поста. когда таки нажмешь на нее, обрати внимание на кнопки CODE и VB. Весьма пользительное дело.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList