Вызов процедуры по ее имени

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Вызов процедуры по ее имени

Сообщение Snussi » 20.04.2005 (Ср) 15:50

Господа! А как можно вызвать функцию по имени?
Поясню на примере
Код: Выделить всё

public sub Sub1()
   msgbox ("Это процедура 1")
end sub
public sub Sub2()
   msgbox ("Это процедура 2")
end sub
' И так далее - n-е количество процедур
dim SubName as String
select case a
    case 1
         SubName="Sub1"
    case 2
         SubName="Sub2"
' И так далее - в SubName записываем имя процедуры. Возможно даже
' что-то типа "frmForm1.Sub1(1,2,3)"
end select


Как после этого вызвать процедуру, имя и параметры которой указаны в SubName?

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 20.04.2005 (Ср) 16:10

С помощью Reflection:
Код: Выделить всё
        Dim FormType As Type = Me.GetType()
        FormType.InvokeMember("Sub1", BindingFlags.InvokeMethod, Nothing, Me, Nothing)

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 21.04.2005 (Чт) 12:25

А если процедуры описаны в модуле? или, что еще хуже, из формы frm1 нужно вызвать методы форм frm2 и frm3?

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 21.04.2005 (Чт) 12:53

Если еще точнее, то
1. Есть модуль, в котором есть объектные переменные.
Код: Выделить всё

    Public fBase As New frmBase
    Public fMessenger As New frmMessenger
    Public fMenu As New frmMenu

Далее, в форме fMenu есть процедура
Код: Выделить всё

public sub SuperSub(a as long)
     dim ModuleName as string
     dim MethodName as string
     if a=0 then
            ModuleName="fBase"
            MethodName="Method1"
     else
            ModuleName="fMessenger"
            MethodName="Method2"
     end if
end sub


Соответственно, что дописать, чтобы при а=0 вызывалась fBase.Method1, а при а<>0 - fMessenger.Method2

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 21.04.2005 (Чт) 15:18

почитай про интерфейсы и забудь про модули())
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 64

    TopList