Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите "чайнику" с Combo / 6 сообщений из 6, страница 1 из 1
23.02.2006, 21:25
    #33563086
KSG
KSG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
Просмотрел все предложения не нашел простого способа контекстного поиска в раскрывающемся списке Combo (сначала все слова на а, с вводом б все слова на аб.... и тд) помогите.
...
Рейтинг: 0 / 0
24.02.2006, 05:11
    #33563287
MaestroEv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
Ну рискну предложить не пользоваться стандартными классами фокса. Все оборачивай своими. А там уже все будет...
...
Рейтинг: 0 / 0
24.02.2006, 09:34
    #33563377
FM32YO aka KID
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
KSGПросмотрел все предложения не нашел простого способа контекстного поиска в раскрывающемся списке Combo (сначала все слова на а, с вводом б все слова на аб.... и тд) помогите.

Покажу не совсем контекстный поиск, но нечто похожее.. чем я пользуюсь

Допустим на форме есть комбо thisForm.Country1
Код для его формирования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * FROM Country INTO CURSOR TCountry ORDER BY cCountryName
WITH THISFORM
	.Country1.BoundTo = .T. 
	.Country1.BoundColumn =  2  
	.Country1.ColumnCount =  2 
	.Country1.ColumnWidths = "150,0" 
	.Country1.RowSource = "TCountry.cCountryName,nCountryId"
	.Country1.RowSourceType =  2  
	.Country1.Value =  1   && для того чтобы сразу показывал что-то
ENDWITH


Рядом ложим текстбокс, в Interactive Change пишем следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for i= 1  to thisForm.Country1.ListCount 
if at(alltrim(UPPER(this.Text)),thisForm.Country1.List(i))= 1  
  thisForm.Country1.ListIndex = i 
exit 
endif 
endfor 
thisForm.Refresh  
как результат - мгновенный поиск в комбо...

Буду благодарен, если кто-то подскажет КАК сделать универсальный класс для такого поиска. то есть, как сделать так, чтобы в Interactive Change текстбокса не было привязки к конкретному комбобоксу
...
Рейтинг: 0 / 0
24.02.2006, 12:18
    #33563586
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
KSGПросмотрел все предложения не нашел простого способа контекстного поиска в раскрывающемся списке Combo (сначала все слова на а, с вводом б все слова на аб.... и тд) помогите.
Это УЖЕ есть в стандартном функционале ComboBox. Должны быть сделаны следующие настройки

ComboBox.IncrementalSearch = .T. - это настройка по умолчанию.

Работает это так:

Сначала необходимо раскрыть выпадающий список ComboBox

Теперь, набираете нужное сочетание клавишь, например "ab"

В результате, указатель списка перемещается на первый элемент, начинающийся с символов "ab". Если такого элемента нет, то на элемент, начинающийся с сивмолв "a". Если и такого элемента нет, то указатель вообще никуда не пермещается.

Единственное ограничение состоит в том, что все символы поиска необходимо набрать за время, которое устанавливается в системное переменной _INCSEEK . Эта переменная появилсь в версии VFP7. Для младших версий время ввода ограничено системной переменной _DBLCLICK .

По умолчанию, это время составляет 0.5 секунд

По прошествии этого времени система предполагает, что поиск завершен и очередные набранные символы - это уже новый поиск.

Если установлено значение свойства

ComboBox.IncrementalSearch = .F.

то поиск также будет осуществляться, но только по одному введенному символу. Каждый символ - новый поиск.

====================

Но все это не имеет особого смысла.

Из самой постановки задачи неявно следует, что раскрывающийся список содержит огромное количество значений. Т.е. количество значений настолько велико, что простая прокрутка списка занимает очень много времени.

Практика показывает, что пользователь может "нормально" воспринять и найти элемент списка толко в том случае, если весь список занимает 1...2 "экрана". Под "экраном" в данном случае понимается количество одновременно отображаемых строк без необходимости использования прокрутки списка.

Если количество элементов значительно превышает этот показатель, то следует всерьез задуматься о другом механизме поиска нужного элемента.

Дело в том, что при таком огромном количестве элементов простого поиск по первым символам явно недостаточно. Ну не может пользователь запомнить такой объем информации. Особенно новичек, первый раз увидевший эту программу.

Значит, он должен иметь возможность выполнить поиск, как минимум, по любому вхождению символов. Т.е. он помнит, что есть символы "ab", но не помнит, где именно, в каком месте искомого элемента, эти символы находятся. Это первые символы или они где-то в середине...

Как следствие, требуется уже не просто выпадающий список, а специальная форма для поиска с возможностью указать не просто первые символы, а целый набор критериев поиска.
...
Рейтинг: 0 / 0
27.02.2006, 17:17
    #33568636
KSG
KSG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
Тронут. Всем огромное спасибо. В продолжении -где и как меняется системная переменная или задаются ее др. параметры в частности _DBLCLICK = nTicks
...
Рейтинг: 0 / 0
27.02.2006, 18:38
    #33568885
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите "чайнику" с Combo
KSGВ продолжении -где и как меняется системная переменная или задаются ее др. параметры в частности _DBLCLICK = nTicks
Самостоятельно так прямо и меняешь где нужно

_DBLCLICK = 1.5

Значение указываешь в секундах.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите "чайнику" с Combo / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]