|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
Всем привет! Работаю в MS Access 2002, c недавнего времени начал работать с модулями классов, понял что это очень классная вещь, позволяет экономить кучу времени для создания однотипных задач в разных формах. Из того что у меня уже работает на модуле класса, это -получение/потеря фокуса(Lost/Got): обработка событий всех текст и комбо боксов в формах (подсветка поля зеленым цветом при получении фокуса); -клавиша вверх(KeyUp):отображение переключения раскладки клавиатуры в доп. форме (необходимо для удаленного рабочего стола) -двойной клик(DblClik): вызов календаря во всех формах для полей, которые имеют короткий формат даты -отслеживания запущенных программ у пользователей (Open/Unload) Вроде все замечательно, но столкнулся с одной проблемой программирования. Так вот вроде выглядит все хорошо, но проблема в том, что если в коллекции форм и контролов я могу выбрать итем с помощью строковой переменной, то для публичного события мне нужно жесткое название ИмениКонтрола. Все это нужно для события вызова календаря в полях даты. После того как пользователь вводит дату руками, происходят события BeforeUpdate, которые обычно проверяют возможно ли введение данного значения в поле и далее разрешают выполнение AfterUpdate, в которых происходят основные изменения и вызовы различных функций. А вот если мы вызываем календарь двойным кликом, то просто происходит событие двойного клика и ничего не происходит. Для автоматизации написал в модуле класса вызов необходимых событий. Модуль класса работает с формой по ссылке, поэтому напрямую выполнять процедуры в форме не получается, приходится обращаться по именам форм и контролов в формате Код: vbnet 1.
Поэтому пока приходится использовать вот такой костыль для обработки событий Код: 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.
Притом это только основные и самые распространенные названия для полей, а есть еще много других, около 2-3 десятков и для каждого прописывать новый кейс, как то неправильно. Хотелось использовать что-то более изящное,вроде Код: vbnet 1.
Может кто знает другие способы, как можно обращаться к событиям формы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 08:48 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
Если отвечать только на поставленный вопрос, то: CallByName Но, есть весомые основания полагать, что Вы делаете что-то не так. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 09:40 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
MorivVV, особо не вчитывался, но может интересует типа такого 1194267 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 09:45 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
MorivVVПосле того как пользователь вводит дату руками, происходят события BeforeUpdateПока все логично - значение изменено, соответственно выстреливают события. MorivVVА вот если мы вызываем календарь двойным кликом, то просто происходит событие двойного клика и ничего не происходит. Тут не очень понятно. Двойным кликом по полю, куда надо ввести дату? Если да, ваш календарь должен изменить дату в этом поле и событие BeforeUpdate сработает. Вам нужно показать не свой костыль, а то, как вызывается календарь и что он делает после выбора даты пользователем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 10:09 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
PredeclaredЕсли отвечать только на поставленный вопрос, то: CallByName Спасибо, как раз то, что нужно было. Странно, что по справке Call не предлагает посмотреть эту функцию ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 11:32 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
На будущее, чтобы можно было найти, большой кейс в первом сообщении Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
при помощи функции CallByName заменяется на простенькую процедуру Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 15:35 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
Временно НЕ принимая во внимание возможности того, что парентом контрола может оказаться вовсе не форма: MorivVV Код: vbnet 1. 2. 3.
Зачем вы получаете ссылку на объект: tctrl.Parent, читаете его имя: .Name, чтобы в дальнейшем искать этот объект в коллекции: Forms(...) Берите сразу ссылку: CallByName tctrl.Parent, ... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 15:51 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 16:42 |
|
Запуск события формы с помщью текстовой переменной
|
|||
---|---|---|---|
#18+
23561346, Спасибо, тоже полезное замечание ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2016, 09:37 |
|
|
start [/forum/search_topic.php?author=RDS&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
16ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 4771ms |
total: | 4984ms |
0 / 0 |