|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
тремя сообщениями выше ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 05:06 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabrist, так я дал своё видение реализации ответа на ваш вопрос. Или надо с конкретным работающим примером? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 05:33 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Не нужно, я понял. Мне кажется со списками будет все громоздко. Особенно если подобных полей не одно. Вообще хотелось какую-то вариативность. Хочет пользователь - набирает в поле сочетание символов, по этим символам содержимое поля фильтруется. Я так уже делал когда-то. Не знает что ищет - желает посмотреть - правый клик мышкой по полю со списком, меню, открываем форму со всеми значениями (присоединенными к полю со списком) так как они записаны в базе. Скроллит, находит что нужно, тыкает - форма закрывается, а значение остается в поле со списком. Ну или не находит и добавляет новую запись, которая затем и отображается в поле со списком. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:25 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
По последнему варианту хрен знает как это правильно сделать, не понятно как передавать значение из формы в форму так что бы потом проблем не было, но реализовать так хотелось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:27 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
TarasiosИменно элемент список, а не поле со списком А чем лучше просто список выпадающего списка? Только место занимает. Я давно использую для выбора из огромных списков со сложными названиями класс для комбобокса, который реализует гуглоподобный поиск при вводе: начинаем набирать текст в комбобоксе, после заданного минимального числа символов (обычно 2) включается таймер, и как только пользователь превысил заданную паузу, список автоматически раскрывается, показывая только элементы, содержащие введенные символы. Далее, если пользователь ввел пробел и продолжил ввод, то поиск идет уже по двум элементам и так далее. Если в списке остался только один элемент, то он может быть выбран автоматически, в зависимости от настроек класса. Быстродействие такого способа очень хорошее - даже на разделенной базе с бэкэнодом на сетевом диске при общем количестве элементов порядка 10000 задержек практически не заметно. Если нужно, могу поделиться классом, цепляется двумя командами к любому комбобоксу. Ну и запрос для комбобокса должен быть сделан по определенным правилам. Если пользователь вообще не знает, с чего начать при выборе данных, может просто раскрыть полный список и посмотреть, что там, но это не удобно для очень больших списков, поэтому можно реализовать своего рода помощь начинающему: по даблклику на комбобоксе открываем справочную форму с базовыми элементами, после выбора одного или нескольких базовых элементов подставляем в комбобокс ключевые элементы и раскрываем список, он будет содержать строки только с выбранными ключевыми элементами ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:30 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Decabristне понятно как передавать значение из формы в форму так что бы потом проблем не было А какие проблемы с передачей? Я использую для передачи параметров между формами OpenArgs для передачи входящих параметров, где параметры идут в виде списка "ключ1=значение1|ключ2=значение2", принимающая форма открывается в виде модального диалога. Если в коде предполагается открывать диалог более одного раза, то создаю функцию, если один раз, то просто напрямую. Обратная передача параметров - диалог не закрывается, а делается невидимым, выполнение кода продолжается после команды открытия формы, там мы считываем возвращаемые параметры из полей формы или из созданных там свойств и закрываем диалог. Ссылку на открывающую форму в открываемую при необходимости также передаю через текст в OpenArgs - в виде текстового пути "форма>подформа>подформа". Это, правда, не работает с формами, открытыми как инстанс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 06:50 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
MrShin, интересный подход. Может даже, он идеален. И если выложите в доступ, буду благодарен. Но может выявиться некое противоречие: если мы исходим из того, что пользователь - не мы с вами, а является типичной бухгалтершей (условно), стремление которой к изучению новых методик стремится к нулю (а может - и сама способность к изучению), то такой подход может оказаться для неё слишком сложен. Это же изучить и осознать, что надо начинать набирать часть слова (а его ещё и вспомнить ведь надо, а там тысячи позиций), потом нажать пробел, потом опять буковки тыкать... А потом тыкать на найденное значение... А ещё ведь есть альтернативный способ поиска, скроллингом, а это ещё позиции знаний, которые надо изучить ;) Уверен, что вам встречалось множество таких юзеров, с реакций на необходимость что то менять и учить - даже если для вас это элементарно - от простых слёз до откровенного саботажа ;) Тут уже вопрос к психологам, но факт есть факт: подавляющее кол-во людей все силы готовы потратить на защиту от изменений своего маленького и привычного мирка, даже если эти изменения ничтожны и реально им на пользу пойдут ;) Потому то я где то и ратую за реализацию замены длинного списка с пусть даже с хитрым поиском - на последовательный выбор по иерархии (Группа, подгруппа, позиция): максимум примитивизма, простейший алгоритм действий, максимум защиты от левых движений пользователя. В каждом блоке - выбор из небольшого списка (если получается все равно слишком много позиций в одной категории - значит, надо ещё больше дробить, добавлять кол-во веток иерархии). Во всяком случае, такой метод много раз испытан и вопросов не возникает. Ну разве что некоторые привыкли к пользованию классическим "деревом". ПыСы: пока не протестируешь всё на "бибизянках", то есть - юзерах, и не получишь их отзывы - любое самое идеальное решение - является просто предметом академического спора программеров ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 07:09 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Вот пример. Описание в заголовке класса. Окно таймера используется для того, чтобы не использовать таймер основного окна, т.к. он может быть занят другими задачами. Приложениями, использующими этот контрол пользуются операторы, далекие от ИТ, типа бухгалтерии или склада, проблем с освоением не возникало, достаточно сказать в двух словах как пользоваться или подсказку для контрола заполнить ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2016, 11:03 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Пришлось на некоторое время прерваться.. MrShin А какие проблемы с передачей? Я использую для передачи параметров между формами OpenArgs для передачи входящих параметров, где параметры идут в виде списка "ключ1=значение1|ключ2=значение2", принимающая форма открывается в виде модального диалога. К сожалению я в программировании не силен. Программирую что-то когда необходимость вынуждает. С этим параметром не работал ни разу, и пока не очень представляю как его использовать в моем случае. Еще судя по вашему описанию - вы подразумеваете нечто другое. Принимающей формой у меня является как раз инициирующая запрос форма. Т.е. например имеем на форме комбобокс на которые повешено 100500 значений. Работать с таким "списком" нормально не возможно. Отчасти это решаемо путем фильтрации списка при вводе символов пользователем, но если пользователь не знает что ищет - это не решение проблемы. Необходимо по какому то действию (двойной щелчек на контроле) - вывести форму со списком всех значений, а так же с элементами управления, фильтрации, группировки и т.п. Здесь ничего сложного не вижу - по событию (двойной клик мышкой) DoCmd.OpenForm. А вот дальше мне не понятно. Ну нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе? Вообще нужно ли для этой операции создавать полностью отдельную форму? Я надеялся использовать независимо существующую форму для просмотра и редактирования списка. Ваш пример с комбобоксом скачал и проверил, у меня выдает ошибку и требует переделать код под 64х битную систему. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 05:36 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Пока сделал так: Инициирующая форма с комбобоксом, по двойному клику мышкой на контроле: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Форма со списком элементов комбобокса по двойному клику мышкой на контролах всех полей (знаю что криво, но лучше пока не придумал, так что бы клик срабатывал на всей записи в любом поле единой процедурой не получается): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Как бы еще добавить в код проверку открыта ли форма в виде диалога, или самостоятельно. Так что бы при открытии самостоятельной формы никаких действий по скрытию формы не производить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 08:28 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristНу нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе? Я обычно для модальных диалогов, которые должны возвращать одно или несколько значений использую функции, подобные той, что приведена ниже. В основной форме по двойному щелчку вызываем эту функцию, если она вернула истину, то присваиваем измененную переменную комбобоксу. В диалоге вместо закрытия скрываем его, закрывается он уже в функции, после получения необходимых данных из диалога: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 09:43 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristКак бы еще добавить в код проверку открыта ли форма в виде диалога, или самостоятельно. Проверьте, есть ли Parent у формы. Есл есть, то она открыта как субформа: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 09:47 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristВаш пример с комбобоксом скачал и проверил, у меня выдает ошибку и требует переделать код под 64х битную систему. Добавил поддержку 64 бит ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:06 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
MrShin, Я правильно понял форма открытая как acDialog уже является подчиненной, и имеет родительскую (Parent) форму? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:14 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Огромное спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:19 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristЯ правильно понял форма открытая как acDialog уже является подчиненной, и имеет родительскую (Parent) форму? Нет, это отдельная форма, acDialog обеспечивает только модальность этого окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:37 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
Т.е. в данном случае проверить в каком режиме открыта форма нельзя? В принципе не вопрос, я могу сделать копию существующей формы со списком модифицировать ее в части взаимодействия с вызывающей формой и использовать эту копию в данной конкретной ситуации. Приложение очень маленькое, путаницы в дальнейшем быть не должно. Но такой подход, думается, не корректен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 10:43 |
|
Как реализовать выбор в поле со списком, если список большой
|
|||
---|---|---|---|
#18+
DecabristА вот дальше мне не понятно. Ну нашел пользователь нужную ему запись - ткнул на нее... как сделать так что бы эта запись отобразилась теперь на первой, инициирующей форме в комбобоксе?Вот, увидев впервые на работе, подумал, что ленточные формы с окошком на каждом поле с выбором вида фильтра (начинается, кончается, входит, равно, не равно...) и самого значения фильтра, а также с галочками сортировки по каждому полю - простая и чрезмерная угодливость заказчику. А на практике, где ежемесячно сотни тысяч записей, где данными пользуются разные службы и подразделения, оказалось совсем даже удачно. Конечно же, предусмотрены рабочие формы для имеющих права редактирования, отчеты по отобранным значениям, экспорт в Excell, просмотр самого фильтра в текстовом виде и т.д. и т.п. И комбобоксы оказались совсем ненужными по сравнению с этими окошками. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2016, 11:21 |
|
|
start [/forum/topic.php?fid=45&msg=39315351&tid=1613118]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 338ms |
total: | 459ms |
0 / 0 |