Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Autocomplete combobox 
V
    Опции темы
avlzll
Дата 28.10.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Приветствую smile

По умолчанию Access делает для так называемых Полей со списком автозаполнение по принципу [Поле] LIKE %. То есть предлагает автоподстановку только если совпали первые буквы. Вопрос. Возможно ли изменить это на [Поле] LIKE % ... %, то есть чтобы подстановка работала с любого места? 

Это сообщение отредактировал(а) avlzll - 28.10.2010, 18:12
PM MAIL   Вверх
Akina
Дата 28.10.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Для стандартного контрола - нет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
avlzll
Дата 28.10.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 28.10.2010,  20:39)
Для стандартного контрола - нет.

А есть варианты нестандартных? 

На данный момент я частично решил проблему, повесив такой код на эвент Combobox_Change так:
Код


 If Len(Me.Combobox1.Text) > 0 Then
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM acc1_short WHERE НАИМ Like '*" & _
           Me.Combobox1.Text & "*' ORDER BY НАИМ"
           Me.Combobox1.Dropdown
           
           Else
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM acc1_short"
    End If


Проблема возникает, например, на такой ситуации. Вводите какое-либо буквенное сочетание (скажем, "ОАО"), в dropdown'e, соответственно, показывается всё то, что подходит под эту строку (например, 5 записей). Нажимаем стрелку вниз на клавиатуре, чтобы перейти к нужной и список мгновенно обрубается до первого значения в нем. Понятно, что срабатывает переопределенный нами Change-эвент и проходит select запрос. Как с этим бороться пока не разобрался. Автоподстановка и автозамена выключены. Может как-нибудь переопределить KeyDown?



Это сообщение отредактировал(а) avlzll - 28.10.2010, 21:08
PM MAIL   Вверх
Bugmaker
Дата 29.10.2010, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



Предлагаю ввести глобальную переменную, допустим
int isComboboxWorked =0;

а в вашем коде добавить
Код

isComboboxWorked=1

 If Len((Me.Combobox1.Text) > 0 And (isComboboxWorked=0)) Then
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM acc1_short WHERE НАИМ Like '*" & _
           Me.Combobox1.Text & "*' ORDER BY НАИМ"
           Me.Combobox1.Dropdown
           
           Else
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM acc1_short"
    End If

гдето тут проверить изменилось ли значение ячейки(был лы сделан выбор из комбобокса)
если да, значит isComboboxWorked=0


Смысл думаю ясен. На практическую реализацю нет пока времени.

Это сообщение отредактировал(а) Bugmaker - 29.10.2010, 08:57
PM MAIL   Вверх
avlzll
Дата 29.10.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Bugmaker, отлично, спасибо за подсказку в правильном направлении smile

В итоге получилось вот что:
Код

Private Sub Combobox1_Change()
 If (Len(Me.Combobox1.Text) > 0 And comboBoxFlag = False) Then
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM db WHERE НАИМ Like '*" & _
           Me.Combobox1.Text & "*' ORDER BY ПОЛНОЕ_НАИМ"
           Me.Combobox1.Dropdown
           
           ElseIf (comboBoxFlag = True And Len(Me.Combobox1.Text) > 0) Then
           Me.Combobox1.Dropdown
           
           ElseIf (Len(Me.Combobox1.Text) = 0) Then
           Me.Combobox1.RowSource = "SELECT db.НАИМ FROM db"
    End If
End Sub


Код

Private Sub Combobox1_KeyDown(KeyCode As Integer, Shift As Integer)
    
    Select Case KeyCode
    Case 38 'Up Arrow
    comboBoxFlag = True
    
    Case 40 'Down Arrow
    comboBoxFlag = True   
    
    End Select
End Sub


Вроде правильно работает smile
PM MAIL   Вверх
Akina
Дата 29.10.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Цитата(avlzll @  29.10.2010,  13:52 Найти цитируемый пост)
    Case 38 'Up Arrow

В VB(A) есть предопределённые константы, типа vbKeyUp - разумнее использовать их. См. соотв. раздел справки.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
avlzll
Дата 29.10.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 29.10.2010,  13:32)
Цитата(avlzll @  29.10.2010,  13:52 Найти цитируемый пост)
    Case 38 'Up Arrow

В VB(A) есть предопределённые константы, типа vbKeyUp - разумнее использовать их. См. соотв. раздел справки.

Не знал, спасибо.

Код

Select Case KeyCode 
        
        Case vbKeyDown
        comboBoxFlag = True    
      
        Case vbKeyUp
        comboBoxFlag = True  
           
End Select 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1383 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.