![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
![]()
Здравствуйте!
Можно в комбобоксе сделать так, чтобы при наборе слова он предлагал уже похожие варианты и при перелистывании (стрелками) можно было бы перемещаться не по всему списку, а по суженному списку на основе введенного. И еще один маленький вопрос. Можно ли сделать так, чтобы при вводе слова, комбобокс не только дописывал слова, но и показывал выпадающий список этих похожих слов (см. первый вопрос) Спасибо. Последний раз редактировалось frantic150; 31.05.2009 в 17:14. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 03.04.2009
Сообщений: 412
|
![]()
Скорее всего Вам сюда http://programmersforum.ru/showthrea...EF%EE%E8%F1%EA
|
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#4 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Дело в том, что сужать список приходится программно - по событию ComboBox1_Change - примерно таким кодом: Код:
Строка Application.SendKeys "{F4}" позволяет программно "нажать на стрелочку" комбобокса, чтобы отобразился выпадающий список. (Метод ComboBox1.DropDown почему-то работает некорректно, отрисовывая список в углу экрана) Во-первых, возникает небольшая проблема - весь список допустимых значений почему-то упаковывается в одну строку комбобокса (типа как в однострочном листбоксе). Но эту проблему, в принципе, при желании можно обойти. Проблема в другом. Список-то мы можем урезать, а вот пролистывать оставшиеся в нём значения (стрелками вверх и вниз) не получится. При нажатии одной из стрелок мы выбираем следующий подходящий пункт из списка, и этот пункт автоматически попадает в основное поле комбобокса. Что происходит дальше, думаю, Вы догадываетесь. Комбобокс по-новой запускает выборку подходящих значений - но теперь подходящее значение уже только одно - и пролистывать уже нечего... Цитата:
Поэкспериментируйте с изменением свойства MatchEntry комбобокса. А для появления списка используйте такой код: Код:
|
||
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
![]()
to EducatedFool
Спасибо. Ну хоть что-то ![]() У меня возник еще один вопрос. Как сделать так, чтобы введенные данные в UserForm сохранялись (все комбобоксы, текстбоксы). UserForm.Hide не помогает (почему то все равно UserForm очищается через некоторое время, как я понял, если зайти в другую книгу/лист и т.п.) О! Плиз помогите, возник еще один вопрос ![]() Как мне ввести этот код для всех комбобоксов сразу (наверняка можно) Код:
P.S. Вы даже не представляете что я там натворил у себя в excel :D. Вручную вдолбливал любые нарастающие изменения. Вот к примеру Код:
![]() И так в каждой форме. (а их 14, как вы помните ![]() Последний раз редактировалось frantic150; 01.06.2009 в 00:54. |
![]() |
![]() |
![]() |
#6 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Будет файл, и подробное описание того, чего Вы пытаетесь добиться, - другое дело. Цитата:
![]() При таком количестве элементов на форме проще использовать классы. Пример можно посмотреть в этой теме: http://www.programmersforum.ru/showthread.php?t=37287 |
||
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Теперь все элементы на форме формируются динамически:
![]() Обработка событий теперь осуществляется одной строкой для всех элементов управления: Код:
Последние введённые данные на форме сохраняются (если, конечно, закрывать форму не крестиком, а кнопкой ГОТОВО) Запуск формы теперь осуществляется не нажатием одной из кнопок, а двойным щелчком по зелёным ячейкам на листе ВСЕГО. TextBox_LOG добавлен лишь для визуального контроля над срабатыванием событий в элементах класса. Что должно происходить при изменении значений полей, и нажатии на кнопку ГОТОВО, толком не понял. (сделал так, как было раньше) Форму Магазины не изменял. Параметры моей формы можно изменить в обработчике события UserForm_Initialize Для этого предусмотрены строки: Код:
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 25.05.2009
Сообщений: 31
|
![]() Цитата:
Не работает. Вот здесь Код:
Добавлено спустя 2 часа И я понял почему ![]() Как изменить этот участок, чтобы все правильно заполнялось? Я пробовал Код:
-------------- Вы не привязывали листы м1-м14 к чему-либо? (По кодам ,вроде, вы их вроде никуда не приписывали, но все же увидел в текстбокс_ЛОГе ("Лист м1") и это меня немножко смутило ) Просто, их вообще не нужно трогать, т.к. это накладные, которые в последствии печатаются/ Просто я подумал, может вы их использовали, ссылаясь на тот факт, что имена этих листов (м1-м14) могут ассоциироваться с нашим делом. Но они отношения к формам не имеют. Они заполняются по листу "Всего". А вот отношение к формам имеют листы data-data13. Как я понял, вы их и использовали в кодах. Вопрос: система заполнения ячеек на "Всего" основываясь на данных листов "data", "data2"..."data13" осталась прежним? Т.е. ячеки заполняются на основе номера строки (listbox) и значения listbox? И объясните, пожалуйста, вот этот Код:
Огромное спасибо, за то что уделили время моей проблеме. Последний раз редактировалось frantic150; 02.06.2009 в 01:33. |
|
![]() |
![]() |
![]() |
#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 |