0 / 0 / 0
Регистрация: 24.03.2019
Сообщений: 3

Как задать имя подпрограммы в качестве формального параметра

24.03.2019, 11:26. Показов 1477. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу реализовать переопределение имени подпрограммы. Программа должна обращаться к соответствующей
подпрограмме в зависимости от выбора в Combo1 (A1 или A2) и выдавать результат в Text1.Text
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim a(2)
Public TT As String
Private Sub Command1_Click()
TT = Form1.Combo1.Text  : ' считываем имя подпрограммы A1 или А2
Call TT(a()) : '  Здесь жалуется Expected prosedure, not variable
t = a(1) + a(2)
Form1.Text1.Text = t
Form1.Refresh
End Sub
 
Sub A1(a())
a(1) = 1: a(2) = 2
End Sub
 
Sub A2(a())
a(1) = 10: a(2) = 20
End Sub
 
Private Sub Command3_Click()
End
End Sub
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2019, 11:26
Ответы с готовыми решениями:

Как прередать контрол в качестве параметра?
Как решить сабж, не прибегая к индексации контролов?? т.е если писать sub rr(contr as Controls) contr.combo1. .... ...

Как передать функцию в качестве параметра?
Как передать функцию в качестве параметра?

Как передать модулю ListBox в качестве параметра?
У меня есть модуль, в который мне нужно передать листбокс из Form2 в качестве параметра, я сделал что-то вроде такого : Public Sub...

8
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
24.03.2019, 15:23
поля в комбобоксе - строки, а имена процедур - объекты. Можно сделать так:
Visual Basic
1
2
3
Private Sub Form_Load()
If Form1.Combo1.Text = "A1" Then Call A1 Else Call A2
End Sub
1
0 / 0 / 0
Регистрация: 24.03.2019
Сообщений: 3
24.03.2019, 16:30  [ТС]
Спасибо за вариант решения, но меня интересует метод решения этой задачи без использования оператора If, так как в моем случае количество подпрограмм не два (A1, A2), а намного больше (порядка сотни). Т.Е. меня интересует решение, когда параметр ТТ будет определен (может быть с помощью класса) как имя подпрограммы.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
24.03.2019, 16:32
Ravsh, вообще подход неправильный.

Хотя бы так, что ли...


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim a(2)
 
Private Sub Command1_Click()
    Form1.Text1.Text = GetTT(Form1.Combo1.Text, a)
End Sub
 
Function GetTT(ByVal s, ByRef a) As Integer
    Select Case s
       Case "A1": a(1) = 1: a(2) = 2
       Case "A2": a(1) = 10: a(2) = 20
    End Select
    GetTT = a(1) + a(2)
End Function
 
 
Private Sub Command3_Click()
End
End Sub
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
24.03.2019, 18:19
Лучший ответ Сообщение было отмечено Ravsh как решение

Решение

Цитата Сообщение от Ravsh Посмотреть сообщение
может быть с помощью класса
Да, можно
Visual Basic
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
'код класса clsmySubs
 
Option Explicit
 
Public Sub A1(a())
a(1) = 1: a(2) = 2
End Sub
 
Public Sub A2(a())
a(1) = 10: a(2) = 20
End Sub
 
'код формы
 
Option Explicit
 
Dim a(2), t
Public TT As String, objMySubs As New clsMySubs
 
Private Sub Command1_Click()
TT = Form1.Combo1.Text:   ' считываем имя подпрограммы A1 или А2
CallByName objMySubs, TT, VbMethod, a() '  теперь не жалуется
t = a(1) + a(2)
Form1.Text1.Text = t
Form1.Refresh
End Sub
 
Private Sub Command3_Click()
End
End Sub
 
Private Sub Form_Load()
  Combo1.List(0) = "A1"
  Combo1.List(1) = "A2"
End Sub
Но вообще "порядка сотни подпрограмм" это странно. Неужели они все разные по логике, их невозможно заменить несколькими подпрограммами с параметрами?
2
Модератор
10033 / 3880 / 882
Регистрация: 22.02.2013
Сообщений: 5,824
Записей в блоге: 78
24.03.2019, 18:43
Нужно использовать полиморфизм. Создаешь общий интерфейс а логику засовываешь в классы. Со стороны клиента бкдет выглядеть как:
Visual Basic
1
2
3
4
5
Dim c As ISomeAction
 
...
 
c.DoSomething(...)  ' // В зависимости от класса будет выполнено то или иное действие
1
0 / 0 / 0
Регистрация: 24.03.2019
Сообщений: 3
25.03.2019, 08:45  [ТС]
Использование оператора On Case меня не устраивает, т.к. ввиду большого количества подпрограмм (A1, A2, ..., An) мне придется набирать все эти названия подпрограмм. У меня эти названия формируются внутри вложенных циклов. Идеально было бы если текст из Combo1, который имеет формат String был преобразован в формат Object.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37907 / 20973 / 4295
Регистрация: 12.02.2012
Сообщений: 34,510
Записей в блоге: 14
26.03.2019, 08:49
The trick, а вызов по указателю?
0
Модератор
10033 / 3880 / 882
Регистрация: 22.02.2013
Сообщений: 5,824
Записей в блоге: 78
31.03.2019, 18:20
Цитата Сообщение от Catstail Посмотреть сообщение
а вызов по указателю?
В VB олицетворением вызова по указателю является вызов метода интерфейса - следует использовать его если прямо не оговорено другое.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2019, 18:20
Помогаю со студенческими работами здесь

Из каталога, имя которого указано в качестве формального параметра, копировать все файлы с расширением .C
Имеется задание: Создавать резервную копию исходных файлов. Копировать все исходные файлы с расширением .С в каталог указанном в...

Как указать ссылку на указатель в качестве формального параметра
Здравствуйте! Есть функция включения элементов в стек. Как правильно написать прототип функции. т.е. как указать ссылку на указатель в...

Как передать функции в качестве параметра имя объекта jQuery?
Имеется функция, которая работает с объектом например: $('.photos img'). Имя селектора CSS И выглядело все так: function...

Передача массива, как формального параметра в функцию
#include <iostream> #include <ctime> using namespace std; const int MAX_SIZE = 100; void print_array(int a, int size)...

Короткое имя файла в качестве параметра
Написать командный файл, который: принимает в качестве параметра короткое имя файла вызывает файл 1.bat передавая имя файла и текущую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Создаем RESTful API с Laravel
Jason-Webb 28.04.2025
REST (Representational State Transfer) — это архитектурный стиль, который определяет набор принципов для создания веб-сервисов. Этот подход к построению API стал стандартом де-факто в современной. . .
Дженерики в C# - продвинутые техники
stackOverflow 28.04.2025
История дженериков началась с простой идеи — создать механизм для разработки типобезопасного кода без потери производительности. До их появления программисты использовали неуклюжие преобразования. . .
Тестирование в Python: PyTest, Mock и лучшие практики TDD
py-thonny 28.04.2025
Тестирование кода играет весомую роль в жизненном цикле разработки программного обеспечения. Для разработчиков Python существует богатый выбор инструментов, позволяющих создавать надёжные и. . .
Работа с PDF в Java с iText
Javaican 28.04.2025
Среди всех форматов PDF (Portable Document Format) заслуженно занимает особое место. Этот формат, созданный компанией Adobe, превратился в универсальный стандарт для обмена документами, не зависящий. . .
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru