powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать название программы в ее вызов по нажатию кнопки
8 сообщений из 8, страница 1 из 1
как передать название программы в ее вызов по нажатию кнопки
    #39322471
Фотография garvy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ACCESS 2003-2010. Есть кнопочная форма("КнопочнаяФорма"), а в ней кнопка1. Каждый раз при вызове кнопочной формы из основной, в зависимости от названия основной формы (откуда вызывается кнопочная) нужно организовать вызов программы, находящейся в общем программном модуле. Программы в модуле именуются по принципу "Форма1_НужноеДействие1", "Форма2_НужноеДействие1" и т.д. Как мне передать название процедуры в команду CALL
что-то типа
Private Sub Кнопка1_Click()
' знаем название процедуры (текстовый формат)
Call ??????????

End Sub
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322484
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garvy,

В сторону CallByName посмотрите. Ну или просто, через Select Case
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322682
Run "Форма1_НужноеДействие1"
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322690
Фотография garvy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select case можно конечно, но это длинный способ. Делаю универсальную кнопочную форму, при вызове которой из разных рабочих форм формируется перечень от 1 до 20 кнопок и на каждую из кнопок вешается программа для данной рабочей формы. CALLBYNAME подошла бы. Но не пойму как передать параметры в нее. Все эти программы для кнопок логично было бы собрать в одном общем модуле и вызывать программы из него. Глядишь - какие-то подошли бы для нескольких случаев - повышаем reusability. Из справки на функцию CALLBYNAME - первый параметр - объект, для которого выполняется метод. Второй - название вызываемой процедуры, третий в моем случае - vbMethod. Непонятно пока с первым параметром. Из модуля кнопочной формы для Кнопка1 надо вызвать процедуру из общего модуля. Что тут объект? Кнопка, сама кнопочная форма, общий модуль? Пробовал все это подставлять - выдает ошибку 2465 application defined or object.defined error или (если объект - кнопка) 438 Object doesnt support method. Упаковал вызов процедуры из общего модуля в отдельную процедуру в модуле кнопочной формы - не помогло.
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322737
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garvy,

С помощью CallByName из стандартного модуля процедуру не вызовешь. Используйте либо Application.Run, либо поместите процедуру в класс.
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322760
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garvy , то есть при нажатии кнопки "сама кнопка" чётко знает, на какой форме она располагается и какое действие при вызове ожидает. Ну так и передавай про нажатию в параметрах и фамилию формы, и требуемое действие...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Кнопка1_Click()
' ...
FormName = Me.Name
ActionNeeded = "Действие1"
Call MyProcedure(FormName, ActionNeeded)
' ...
End Sub



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub MyProcedure(FormName, ActionNeeded)
Select Case FormName
    Case "Форма1"
         Select Case ActionNeeded
             Case "Действие1"
                 Call Форма1_НужноеДействие1()
             Case "Действие2"
             '...
        End Select
    Case "Форма2"
    ' ...
End Select
End Sub


И пусть тебя не смущает формальная тавтология - потенциальный геморрой со всякоразными CallByName и протчая обойдётся дороже кажущейся изящности и лаконичности.
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39322780
Фотография garvy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! У меня в итоге заработало таким способом:
Private Sub Кнопка1_Click()
Dim cl As ПрограммыКнопок ' создал в общих модулях модуль класса с таким именем - в него буду складывать все возможные программы для кнопок
Set cl = New ПрограммыКнопок
CallByName cl, Кнопка1.Tag, VbMethod ' при открытии кнопочной формы из конкретной рабочей формы прописываю в тегах каждой кнопки название программы для нее, сам список кнопок для каждой рабочей формы веду в отдельной таблице, где дана информация по имени кнопки, всплывающей подсказке, вызываемой программе.

End Sub
...
Рейтинг: 0 / 0
как передать название программы в ее вызов по нажатию кнопки
    #39323008
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
garvy... CallByName cl, Кнопка1.Tag, VbMethod ' при открытии кнопочной формы из конкретной рабочей формы прописываю в тегах каждой кнопки название программы для нее...
Зачем писать в тэг, затем дергать CallByName?

Пишите уж тогда сразу в OnClick Property.
Типа: =DoIt(),
где DoIt - имя функции.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как передать название программы в ее вызов по нажатию кнопки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]