Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / OnAction замучил. Как победить? / 25 сообщений из 34, страница 1 из 2
23.09.2018, 14:14
    #39706546
OnAction замучил. Как победить?
Друзья, помогите пожалуйста с контекстным меню.
Получаю сообщение "Введенное выражение содержит функцию с неверным числом аргументов."
Уже что только не перепробовал (. НЕ пойму как победить...

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Private Sub TEST_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim IPNE$, script$, BLK_Cell$, q$
IPNE = "10.10.10.10"
UBL_Cell = BLK_UNBLKCell(Me.bcfid, Me.bscid, "UBL")	' тут функция вернет текстовое значение

'q = toExecute(IPNE, UBL_Cell)  '<- вот эту функцию хочу выполнить в OnAction
On Error Resume Next
'Debug.Print "PopUpName: " & PopUpName
CommandBars(PopUpName).Delete
Err.Clear

On Error GoTo Err_
With Me
    PopUpName = .Name & .hWnd
    PopUpName = "test"
End With
On Error Resume Next
With CommandBars.Add(PopUpName, 5, , True)
    With .Controls.Add(1, , , , True)
        .Caption = "UBL_Cell " & Me.btsName & "(BCF=" & Me.bcfid & " ,BSC=" & bscid & ")"
        '.OnAction = "=toExecute(""" & IPNE & "," & UBL_Cell & """)" ' не получается выполнить
        .OnAction = "=toExecute(""'" & IPNE & "','" & UBL_Cell & "'"")"    ' не получается выполнить
     End With

End With

With Me
    .ShortcutMenu = True
    .ShortcutMenuBar = PopUpName
End With

Exit_TEST_MouseDown:
    Exit Sub

Err_:
    MsgBox Err.description & "(&#206;&#248;&#232;&#225;&#234;&#224; - " & Err.Number & ")", , "&#206;&#248;&#232;&#225;&#234;&#224;"
    Resume Exit_TEST_MouseDown
End Sub

Public Function toExecute(IPNE As String, script As String)

If Screen.ActiveForm.SendToServer = True Then
    DoCmd.Beep
    If MsgBox("&#194;&#251; &#228;&#229;&#233;&#241;&#242;&#226;&#232;&#242;&#229;&#235;&#252;&#237;&#238; &#245;&#238;&#242;&#232;&#242;&#229; &#239;&#238;&#241;&#235;&#224;&#242;&#252; &#234;&#238;&#236;&#224;&#237;&#228;&#251; &#237;&#224; BSC?", vbYesNo, "&#207;&#238;&#228;&#242;&#226;&#229;&#240;&#230;&#228;&#229;&#237;&#232;&#229;") = vbYes Then
        Form_FormaLog.SendData IPNE, script
    End If
Else
    MsgBox script, , "&#207;&#238;&#236;&#229;&#249;&#229;&#237;&#238; &#226; &#225;&#243;&#244;&#229;&#240; &#238;&#225;&#236;&#229;&#237;&#224;!"
    Text2Clipboard (script)
End If

End Function
...
Рейтинг: 0 / 0
23.09.2018, 16:43
    #39706570
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Архимедофф,
21681357
...
Рейтинг: 0 / 0
23.09.2018, 20:56
    #39706665
OnAction замучил. Как победить?
sdku,
У вас функции в примере простые. У меня по сложней будет, в этом то для меня и загвоздка.
Caption посмотрите у меня в примере. Т.е. в зависимости от того на какой строке стою в раздельной форме, то и формируется. И OnAction в результате разный.
...
Рейтинг: 0 / 0
23.09.2018, 21:35
    #39706681
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Архимедофф,

Нормальные герои всегда идут в обход. ©

Версия надеюсь от 2007 или старше?
Используй для передачи параметров TempVars .


Архимедофф
Код: vbnet
1.
Form_FormaLog.SendData IPNE, script

Кто так учил обращаться к формам? Следует обращаться к экземпляру формы в коллекции открытых форм, а не к классу формы.
...
Рейтинг: 0 / 0
23.09.2018, 22:00
    #39706686
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Код: vbnet
1.
2.
3.
4.
' с кавычками помойму что-то перекручено, и "=" нужно убрать 
 ' т.е.
        .OnAction = "toExecute(""" & IPNE & """,""" & UBL_Cell & """)" 
 


есть ещё такой способ
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
.tag= IPNE & "|" & UBL_Cell 
 .OnAction = "toExecute" 

Public Function toExecute()
dim mass$()
mass=split(CommandBars.ActionControl.Tag,"|")
...
 Form_FormaLog.SendData mass(0), mass(1)
...
Рейтинг: 0 / 0
23.09.2018, 22:01
    #39706687
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Правильнее всего пользовать подписку.

В данном случае с OnAction, можно просто заюзать Parametr и/или Tag кнопки.
...
Рейтинг: 0 / 0
23.09.2018, 22:02
    #39706688
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
alecko обогнал на кнопке. :)
...
Рейтинг: 0 / 0
24.09.2018, 05:09
    #39706749
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
ПанургКто так учил обращаться к формам? Следует обращаться к экземпляру формы в коллекции открытых форм, а не к классу формы.
А чё не так?
Вам не нравятся классы, или вы не умеете их готовить
...
Рейтинг: 0 / 0
24.09.2018, 08:16
    #39706761
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
ROIПанургКто так учил обращаться к формам? Следует обращаться к экземпляру формы в коллекции открытых форм, а не к классу формы.
А чё не так?
Вам не нравятся классы, или вы не умеете их готовитьОлег Игоревич, это твой дежурный вопрос? Я так понимаю, ты достиг высот в этом деле? Если да, то не задавай таких вопросов.
...
Рейтинг: 0 / 0
24.09.2018, 08:59
    #39706773
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
ПанургОлег Игоревич, это твой дежурный вопрос? Я так понимаю, ты достиг высот в этом деле? Если да, то не задавай таких вопросов.
А почему вам можно задавать эти вопросы?
А если серьёзно, то ничего такого в таком обращении нет,
и конечно надо четко иметь представление.(я думаю оно имеется)
Не пугайте людей понапрасну.
С уважением не знаю вашего имени отчества
...
Рейтинг: 0 / 0
24.09.2018, 10:01
    #39706800
OnAction замучил. Как победить?
alecko, спасибо. Без "=" не работает.
Про второй вариант даже не знал :) Приму на вооружение.

Код: vbnet
1.
2.
'   вот так работает
        .OnAction = "=toExecute(""" & IPNE & """,""" & UBL_Cell & """)" 
...
Рейтинг: 0 / 0
24.09.2018, 10:06
    #39706801
OnAction замучил. Как победить?
А для того, чтобы это меню работало на разных формах, это как раз через классы делается??
Прошу прощения за глупый вопрос, но я не программист. :)
...
Рейтинг: 0 / 0
24.09.2018, 10:56
    #39706826
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Архимедофф, согласен (щас проверил), с заданием параметров нужен "=" т.е. или "toExecute" или "=toExecute()" -вторым элементом не пользовался никогда - все через .tag да иногда .parameter
Чтобы работало на разных формах создайте меню в модуле, да вызывайте откуда нужно; менять caption, tag можно "на лету".
...
Рейтинг: 0 / 0
24.09.2018, 11:31
    #39706860
OnAction замучил. Как победить?
alecko,
Я меню это привязал только к одному полю на форме. Но оно выскакивает, если и на других полях нажать правую кнопку, но уже после нажатия на используемое поле. Как убрать это? Предполагаю, что что-то надо повесить на потерю фокуса, чтобы вернулось стандартное меню, например.
...
Рейтинг: 0 / 0
24.09.2018, 11:36
    #39706864
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
АрхимедоффА для того, чтобы это меню работало на разных формах, это как раз через классы делается??В данном случае инкапсуляция не нужна, ИМХО.

Зачем вообще нужно передавать параметры в функцию в данном случае? Функция написана в модуле формы где и происходит работа контекстного меню. Ну так и получайте значения в самой функции, а не процедуре события TEST_MouseDown . Таким образом ненужно будет дёргать коллекцию CommandBars удаляя, добавляя меню.
...
Рейтинг: 0 / 0
24.09.2018, 11:39
    #39706866
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
АрхимедоффЯ меню это привязал только к одному полю на форме. Но оно выскакивает, если и на других полях нажать правую кнопку, но уже после нажатия на используемое поле. Как убрать это? Предполагаю, что что-то надо повесить на потерю фокуса, чтобы вернулось стандартное меню, например.Задавай именно этому полю ShortcutMenuBar , а не форме.
...
Рейтинг: 0 / 0
24.09.2018, 13:07
    #39706943
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Архимедофф, sdku в 21683169 уже представил классный пример - посмотрите его ещё раз, незамутненым шелухой а-ля eval() взглядом.
...
Рейтинг: 0 / 0
24.09.2018, 14:55
    #39707085
OnAction замучил. Как победить?
alecko,
ДА, видел. Надо время на разобраться, красивое решение.
Панург. Если на базе моего примера, то так пробовал. Не работает. Так же и на других полях выскакивает это меню. Что-то делаю не так... :(
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'Было 
With Me
    .ShortcutMenu = True
    .ShortcutMenuBar = PopUpName
End With
'Стало
With Screen.ActiveForm.МоёПоле
    .ShortcutMenu = True
    .ShortcutMenuBar = PopUpName
End With
...
Рейтинг: 0 / 0
24.09.2018, 16:01
    #39707156
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
АрхимедоффЕсли на базе моего примераПриме то где?
...
Рейтинг: 0 / 0
24.09.2018, 16:33
    #39707186
OnAction замучил. Как победить?
Панург,

А вверху темы ))
...
Рейтинг: 0 / 0
24.09.2018, 17:43
    #39707223
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
АрхимедоффА вверху темы )) А, ну да...
...
Рейтинг: 0 / 0
25.09.2018, 08:06
    #39707401
Ламер Ламерович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
ROIПанургКто так учил обращаться к формам? Следует обращаться к экземпляру формы в коллекции открытых форм, а не к классу формы.
А чё не так?
Вам не нравятся классы, или вы не умеете их готовить
Согласен с Панургом. Не следует так обращаться к формам.
Как отловить в какой строке и почему ошибка
...
Рейтинг: 0 / 0
25.09.2018, 09:36
    #39707460
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Ламер ЛамеровичROIпропущено...

А чё не так?
Вам не нравятся классы, или вы не умеете их готовить
Согласен с Панургом. Не следует так обращаться к формам.
Как отловить в какой строке и почему ошибка
Вы сами прочитали про что там (разобрались?)
Так что ваша ссылка ни о чем. ("не читал но осуждаю")
...
Рейтинг: 0 / 0
25.09.2018, 13:18
    #39707642
Ламер Ламерович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
ROIЛамер Ламеровичпропущено...

Согласен с Панургом. Не следует так обращаться к формам.
Как отловить в какой строке и почему ошибка
Вы сами прочитали про что там (разобрались?)

Про то, что обращения Form_ИмяФормы лучше избегать, но вы можете использовать, что хотите )
...
Рейтинг: 0 / 0
25.09.2018, 13:38
    #39707668
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OnAction замучил. Как победить?
Архимедофф,
зачем все усложнять?
см.Form3
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / OnAction замучил. Как победить? / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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