SUB OU SEU ENDERECO COMO PARAMETRO DE OUTRO SUB

JALEXM 19/03/2012 09:08:33
#397471
Olá.
é possível passar um sub (na verdade, seu endereço) como parâmetro de outro de sub?
ALEVALE 19/03/2012 09:27:04
#397478
Explique melhor o que você precisar fazer ?
JALEXM 19/03/2012 09:45:44
#397479
Citação:

:
Explique melhor o que você precisar fazer ?



Bem resumidamente, seria algo assim:


Private Sub Command1_Click()
If Condicao Then
Calcular Somar
Else
Calcular Subtrair
End
End Sub

Private Sub Calcular(ParamSub)
ParamSub
End Sub
MACYSZYN 19/03/2012 10:23:51
#397483
Sim, é possível

Private Sub Command1_Click()
Msgbox Calcular (Somar)
Msgbox Calcular (Subtrair)
End Sub

Private Sub Calcular(ParamSub) as string
If ParamSub = [Ô]Somar[Ô] Then
Calcular = 1+1
elseif ParamSub = [Ô]Subtrair[Ô] Then
Calcular = 1/1
else
Calcular = 1
End if
End Sub

Veja se é isso.
LUIZCOMINO 19/03/2012 10:34:41
#397485
Citação:

:
Sim, é possível

Private Sub Command1_Click()
Msgbox Calcular (Somar)
Msgbox Calcular (Subtrair)
End Sub

Private Sub Calcular(ParamSub) as string
If ParamSub = [Ô]Somar[Ô] Then
Calcular = 1+1
elseif ParamSub = [Ô]Subtrair[Ô] Then
Calcular = 1/1
else
Calcular = 1
End if
End Sub

Veja se é isso.




amigão sua resposta está correta apenas a ultima parte que não é sub e sim function, porque sub não retorna valor apenas funcion

Function Calcular(ParamSub) As String
If ParamSub = [Ô]Somar[Ô] Then
Calcular = 1 + 1
ElseIf ParamSub = [Ô]Subtrair[Ô] Then
Calcular = 1 / 1
Else
Calcular = 1
End If
End Function
JALEXM 19/03/2012 10:44:17
#397487
Citação:

:
Sim, é possível

Private Sub Command1_Click()
Msgbox Calcular (Somar)
Msgbox Calcular (Subtrair)
End Sub

Private Sub Calcular(ParamSub) as string
If ParamSub = [Ô]Somar[Ô] Then
Calcular = 1+1
elseif ParamSub = [Ô]Subtrair[Ô] Then
Calcular = 1/1
else
Calcular = 1
End if
End Sub

Veja se é isso.



Agradeço, amigo, mas infelizmente não é tão simples. O exemplo que eu passei é só uma ideia muito resumida do que eu preciso.
Eu preciso mesmo passar os Subs (ou seus endereços) como parâmetro, inclusive porque eles estão em outro módulo.

Explicando melhor: estou fazendo uma classe que vai ser usada por mim e por outros programadores. A classe tem um método que deve chamar um Sub que está fora dela, de acordo com algumas condições. Só que cada programador vai definir seu próprio Sub a ser chamado. Eu posso defnir meu Sub como Somar enquanto outro programador poderá definí-lo como Subtrair. Então o método da classe deve chamar o Sub que o programador passar cono parâmetro.

Tem alguma ideia de como fazer isso em VB?

LLAIA 19/03/2012 11:31:35
#397495
PHOENIX209E 19/03/2012 15:21:42
#397530
Pra que complicar?
Simples,crie uma sub que receba parametros,e faça as operaçoes que desjesa

sub calc(ptipo as integer)
select case ptipo
case 1
soma
case 2
subtração
case 3
multiplicação
end sub

esse é um metodo bem simples e bastante funcional
PHOENIX209E 19/03/2012 15:53:33
#397540
Detalhe,
Porque voce nao migra pra vb net?
uma linguagem 100% orientada a objetos,la os conceitos de oop são bem mais implementados,
no seu caso o uso do poli-morfismo,herança iria ajudar bastante,voce poderia fazer o uso de overrides,
na minha opiniao seria bem melhor,
vb6 ja esta defasado.
JALEXM 19/03/2012 16:08:45
#397544
Citação:

:
Pra que complicar?
Simples,crie uma sub que receba parametros,e faça as operaçoes que desjesa

sub calc(ptipo as integer)
select case ptipo
case 1
soma
case 2
subtração
case 3
multiplicação
end sub

esse é um metodo bem simples e bastante funcional



Amigo, você acha que eu quero complicar?
Acho que você não leu minhas mensagens anteriores.
JALEXM 19/03/2012 16:10:28
#397545
Citação:

:
Detalhe,
Porque voce nao migra pra vb net?
uma linguagem 100% orientada a objetos,la os conceitos de oop são bem mais implementados,
no seu caso o uso do poli-morfismo,herança iria ajudar bastante,voce poderia fazer o uso de overrides,
na minha opiniao seria bem melhor,
vb6 ja esta defasado.



Acho que vou dar o telefone do meu patrão para você.
Quem sabe você o convence?
Tópico encerrado , respostas não são mais permitidas