Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
22.04.2018, 21:09
|
|||
---|---|---|---|
|
|||
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Всем привет Ыы... понадобилось узнать при выполнении процедуры передан ли в неё необязательный аргумент Например: Public Sub Открыть_форму_Команды(Optional ByRef фильтр As Boolean) Дело в том, что в случае вызова процедуры без аргумента, он всё равно будет равен False. А мне надо знать точно, указан он или нет. Заранее спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 07:38
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Настаевмне надо знать точно, указан он или нет.Это невозможно. Optional параметр всё равно формируется, вне зависимости от того, указан он в операторе вызова или нет - это тебе не ParamArray. И поэтому в момент старта процедуры он существует в обязательном порядке. И нет возможности определить, имеет он значение по умолчанию, или это присвоенное. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 08:58
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Вместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 09:18
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Настаев, Если тип данных Variant, то можно использовать функцию IsMissing и узнать, передано ли значение аргумента. Ну а если тип данных String, то можно использовать StrPtr для этих же целей. Если же тип Object, то можно проверить Is Nothing. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 09:52
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
studierenНу а если тип данных String, то можно использовать StrPtr для этих же целей. Если же тип Object, то можно проверить Is Nothing. Эти способы ненадежны, т.к. если параметр не будет пропущен, но будет передана неинициализированная строка, то StrPtr также вернет 0, как и при пропущеном параметре. То же самое и с объектом, передача объекта Nothing - это вполне обычная ситуация, определить нельзя достоверно, был ли он опущен. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 14:27
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
1 способ. тип изменить на byte, а в boolean преобразовывать уже в процедуре, например по правилу, если 0-параметр не передавался, -1 true, 1-false, или ещё как.. 2 способ.поставить другой параметр, и при присваивании значения optional параметру ставить этот параметр в true ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 17:18
|
|||
---|---|---|---|
|
|||
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Спасибо всем за идеи очень полезная инфа :) ща буду прикручивать ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.04.2018, 17:56
|
|||
---|---|---|---|
|
|||
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
MrShinВместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок. Спасибо, друг я изменил тип аргумент на Variant , проверил с помощью isMissing и преобразовал в Boolean c помощью CBool Всё заиграло новым красками )) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2018, 06:34
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
НастаевMrShinВместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок. Спасибо, друг я изменил тип аргумент на Variant , проверил с помощью isMissing и преобразовал в Boolean c помощью CBool Всё заиграло новым красками )) Единственное, что утаил от народа тредстартер: зачем это может понадобиться? ЗЫ. Вот понапрограммируют такие горе-программисты - а потом, разгребай... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.04.2018, 10:39
|
|||
---|---|---|---|
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
aleks222, ну это то просто, учитывая название процедуры и явно указанное byref являющееся умолчальным - он использует форму в разных режимах, переменную возвращает, если форма является подчиненной, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.04.2018, 20:11
|
|||
---|---|---|---|
|
|||
Как узнать, передан ли аргумент в процедуру? |
|||
#18+
Фанатзёры )) Я процедуру с потолка написал, чтобы вопрос понятней был А нужно мне это вот зачем... Я написал xml-файлы для создания своей ленты в Access. Чтобы элемент управления (кнопка, например) среагировал на нажатие, там прописано следующее: onAction="Название_процедуры" Разумеется, что для каждой кнопки создана своя процедура. Я поставил себе цель проверять перед запуском любой процедуры выполнять какие-то одинаковые действия. Например, проверить права пользователя. Чтобы не вставлять эту проверку в каждую из процедур, я создал одну единственную, которая запускается при нажатии на любую из кнопок ленты. Так вот... Эта единственная процедура делает, что ей надо и только потом запускает следующую методом Run "control.id" , где control.id совпадает с названием запускаемой процедуры. Поскольку некоторые из кнопок являются переключателями, они требуют передачи аргумента Pressed. Для них нужен вызов с аргументом. Вот так: Run "control.id" , pressed Я думаю, что удовлетворил ваш интерес ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=45&mobile=1&tid=1611486]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 153ms |
0 / 0 |