| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > [Перенесено из VB6] Определить объект на котором кликнули |
| Автор: BelkaJul 4.9.2007, 13:47 | ||
| доброго времени суток, коллеги. Общая суть проблемы: на форме расположено около сотни объектов "прямоугольник" (имена в виде L1S1P1, L2S1P1....). В базе товара есть поле "полка на складе" (хранится строка, совпадающая с именем одного из "прямоугольников"). Надо чтобы кликая на прямоугольнике (символизирующем конкретную полку) - выдавалась информация о товаре, который лежит на складе. ЧТобы не плодить код сделань так:
Т.е. в цикле на все эти "прямоугольники" вешаю процедуру обработки "macros_fun". Передать в macros_fun агрументом имя объекта (на котором кликнули) не получается. Можно ли как-нибудь в функции macros_fun определить на каком же прямоугольнике только что кликнул пользователь? вариант Screen.ActiveForm.ActiveControl.ControlName не срабатывает |
| Автор: Akina 4.9.2007, 16:42 | ||
Это макрос или процедура в модуле? |
| Автор: Akina 4.9.2007, 17:28 | ||
| Предлагаю такие решения. Решение 1 - Вместо OnClick использовать OnMouseUp - ему передаются, кроме всего прочего, координаты клика, что позволит определить контрол, на котором произошел клик. Что-нить вроде:
Если это неприменимо, и надо использовать обязательно OnClick, то Решение 2 - Дополнительно обработать OnMouseDown, в нем определять имя контрола, на котором выполнен последний клик (также по координатам клика), сохранять его в переменной уровня модуля или проекта, и использовать его в процедуре OnClick. |
| Автор: bopoha 5.9.2007, 23:56 | ||
| Зачем тебе макрос? Функция гораздо лучше - ошибки можно обработать и прочее. В модуле необходимо объявить публичную фнункцию. Элементу на событие присваивать так "=имя_функции()". ActiveControl не работает, потому что прямоугольник не может получить фокуса. Для того чтобы сосалться на текущий объект в событии используй CodeContextObject. Т.е. из справки You can use the CodeContextObject property to determine the object in which a macro or Visual Basic code is executing. Read-only Object. expression.CodeContextObject expression Required. An expression that returns one of the objects in the Applies To list. Setting The CodeContextObject property is set by Microsoft Access and is read-only in all views. Remarks The ActiveControl, ActiveDataAccessPage, ActiveDatasheet, ActiveForm, and ActiveReport properties of the Screen object always return the object that currently has the focus. The object with the focus may or may not be the object where a macro or Visual Basic code is currently running, for example, when Visual Basic code runs in the Timer event on a hidden form.
|
| Автор: BelkaJul 6.9.2007, 13:19 | ||||
| Akina, видимо где-то я не догоняю :( bopoha,
аааа, точно!!!!! (переделала. Вместо прямоугольников теперь кнопки) Теперь можно использовать и ActiveControl.ColntrolName
Большое спасибо всем за участие и помощь!!! |