|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.05.2009, 17:12 | #1 |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
ComboBox умеет предлагать список похожих вариантов?
Здравствуйте!
Можно в комбобоксе сделать так, чтобы при наборе слова он предлагал уже похожие варианты и при перелистывании (стрелками) можно было бы перемещаться не по всему списку, а по суженному списку на основе введенного. И еще один маленький вопрос. Можно ли сделать так, чтобы при вводе слова, комбобокс не только дописывал слова, но и показывал выпадающий список этих похожих слов (см. первый вопрос) Спасибо. Последний раз редактировалось frantic150; 31.05.2009 в 17:14. |
31.05.2009, 17:41 | #2 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 412
|
Скорее всего Вам сюда http://programmersforum.ru/showthrea...EF%EE%E8%F1%EA
|
31.05.2009, 17:51 | #3 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
Цитата:
|
|
31.05.2009, 23:41 | #4 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Дело в том, что сужать список приходится программно - по событию ComboBox1_Change - примерно таким кодом: Код:
Строка Application.SendKeys "{F4}" позволяет программно "нажать на стрелочку" комбобокса, чтобы отобразился выпадающий список. (Метод ComboBox1.DropDown почему-то работает некорректно, отрисовывая список в углу экрана) Во-первых, возникает небольшая проблема - весь список допустимых значений почему-то упаковывается в одну строку комбобокса (типа как в однострочном листбоксе). Но эту проблему, в принципе, при желании можно обойти. Проблема в другом. Список-то мы можем урезать, а вот пролистывать оставшиеся в нём значения (стрелками вверх и вниз) не получится. При нажатии одной из стрелок мы выбираем следующий подходящий пункт из списка, и этот пункт автоматически попадает в основное поле комбобокса. Что происходит дальше, думаю, Вы догадываетесь. Комбобокс по-новой запускает выборку подходящих значений - но теперь подходящее значение уже только одно - и пролистывать уже нечего... Цитата:
Поэкспериментируйте с изменением свойства MatchEntry комбобокса. А для появления списка используйте такой код: Код:
|
||
01.06.2009, 00:44 | #5 |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
to EducatedFool
Спасибо. Ну хоть что-то У меня возник еще один вопрос. Как сделать так, чтобы введенные данные в UserForm сохранялись (все комбобоксы, текстбоксы). UserForm.Hide не помогает (почему то все равно UserForm очищается через некоторое время, как я понял, если зайти в другую книгу/лист и т.п.) О! Плиз помогите, возник еще один вопрос Как мне ввести этот код для всех комбобоксов сразу (наверняка можно) Код:
P.S. Вы даже не представляете что я там натворил у себя в excel :D. Вручную вдолбливал любые нарастающие изменения. Вот к примеру Код:
И так в каждой форме. (а их 14, как вы помните ) Последний раз редактировалось frantic150; 01.06.2009 в 00:54. |
01.06.2009, 01:27 | #6 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Цитата:
Будет файл, и подробное описание того, чего Вы пытаетесь добиться, - другое дело. Цитата:
При таком количестве элементов на форме проще использовать классы. Пример можно посмотреть в этой теме: http://www.programmersforum.ru/showthread.php?t=37287 |
||
01.06.2009, 18:06 | #7 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
Цитата:
|
|
01.06.2009, 23:13 | #8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
Теперь все элементы на форме формируются динамически:
Обработка событий теперь осуществляется одной строкой для всех элементов управления: Код:
Последние введённые данные на форме сохраняются (если, конечно, закрывать форму не крестиком, а кнопкой ГОТОВО) Запуск формы теперь осуществляется не нажатием одной из кнопок, а двойным щелчком по зелёным ячейкам на листе ВСЕГО. TextBox_LOG добавлен лишь для визуального контроля над срабатыванием событий в элементах класса. Что должно происходить при изменении значений полей, и нажатии на кнопку ГОТОВО, толком не понял. (сделал так, как было раньше) Форму Магазины не изменял. Параметры моей формы можно изменить в обработчике события UserForm_Initialize Для этого предусмотрены строки: Код:
|
02.06.2009, 00:16 | #9 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
Цитата:
Не работает. Вот здесь Код:
Добавлено спустя 2 часа И я понял почему Оказывается на листы Дата-Дата13 с полей возвращались номера строк с цифры 0 (если картофель). А ячейки с адресом 0 не существует. Вот из-за чего выдавало 1004 Как изменить этот участок, чтобы все правильно заполнялось? Я пробовал Код:
-------------- Вы не привязывали листы м1-м14 к чему-либо? (По кодам ,вроде, вы их вроде никуда не приписывали, но все же увидел в текстбокс_ЛОГе ("Лист м1") и это меня немножко смутило ) Просто, их вообще не нужно трогать, т.к. это накладные, которые в последствии печатаются/ Просто я подумал, может вы их использовали, ссылаясь на тот факт, что имена этих листов (м1-м14) могут ассоциироваться с нашим делом. Но они отношения к формам не имеют. Они заполняются по листу "Всего". А вот отношение к формам имеют листы data-data13. Как я понял, вы их и использовали в кодах. Вопрос: система заполнения ячеек на "Всего" основываясь на данных листов "data", "data2"..."data13" осталась прежним? Т.е. ячеки заполняются на основе номера строки (listbox) и значения listbox? И объясните, пожалуйста, вот этот Код:
Огромное спасибо, за то что уделили время моей проблеме. Последний раз редактировалось frantic150; 02.06.2009 в 01:33. |
|
02.06.2009, 08:31 | #10 | |||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
У каждого комбобокса, листбокса, и формы есть свойство Tag
Для комбобоксов и листбоксов мы храним в этом свойстве порядковый номер этого элемента. (чтобы при изменении значения знать, в какую строку вносить данные) Для формы в этом свойстве храним номер листа, на который будет производиться запись (чтобы знать, на какой лист записывать данные - на лист data5 или лист data12 Код:
Цитата:
Как у Вас было, так я и оставил. Цитата:
В Вашим формах были сотни строк такого кода: (пример для формы м10) Код:
Я лишь оптимизировал ВАШ код, сократив количество строк до минимума, и убрал повторяющийся под. Цитата:
Хотя бы потому, что там нет примера файла, и ничего не сказано, какой из листов обрабатывать. Назначение строки sh1.Cells(j, 11).Value = Worksheets("data" & F.Tag).Cells(i, 2).Value мне вообще непонятно. Попробуйте использовать такой вариант: if j>0 then sh1.Cells(j, 11).Value = Worksheets("data" & F.Tag).Cells(i, 2).Value (sh1 - это лист ВСЕГО) |
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
выпадающий список ComboBox | pu4koff | Win Api | 29 | 27.02.2014 17:23 |
Как в Combobox убрать список? | Alexi | Компоненты Delphi | 10 | 04.01.2011 08:25 |
ComboBox как сделать чтобы список в нем формировался с другой страницы? | sttafi | Microsoft Office Excel | 11 | 12.05.2009 17:45 |
Потестируйте программу (поиск похожих MP3 файлов) | mutabor | Софт | 9 | 28.10.2008 14:01 |