Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZecaLoteiro

Chamando um método com Delegate?

Recommended Posts

Boa tarde pessoal, podem me ajudar?

 

Tenho um formulário que é compartilhado entre algumas aplicações....e em um caso específico, quando esse form é fechado, preciso que ele execute um método que está em uma das aplicações que o chamou, mas não está em todas....

 

Desta forma, não posso chamar da forma comum:

dim form as new frmFormularioPai()
form.nomeDoMetodo()

Não consigo fazer isso, por que o frmFormularioPai não faz parte de todos os projetos, então daria erro na hora de compilar....

 

Pensei em armazenar a funcion num módulo comum a todas as aplicações, e então, se for o caso específico, rodo a função...

 

Mas como armazenar a função? Com delegate?? é a forma certa? Já procurei, achei exemplos confusos, li, e não entendi...

 

Não sei se estou no caminho certo, mas cheguei no seguinte ponto:

Declarei no módulo:

 

Public Delegate Sub delegado()
Public rotinaDelegada As delegado()

 

E na minha aplicação tentei definir:

 

Modulo.rotinaDelegada = AddressOf carregaSolicitacoes

Mas obtenho o erro:

 

Error 1 'AddressOf' expression cannot be converted to '1-dimensional array of Compras.Rotinas.delegado' because '1-dimensional array of Rotinas.delegado' is not a delegate type.
Alguém já passou por isso? Sabe qual a forma correta de eu armazenar uma function? e como posso chama-la depois??
Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Joga o método em uma classe global e executa ele de qualquer form. Não precisa armazenar, você simplesmente busca essa função diretamente da classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu jogar o método em uma classe, nos projetos em quem o form não está presente ele não vai achar os componentes do formulario. E não vai deixar compilar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era justamente isso que eu não queria fazer, não quero adicionar um form nos projetos que não vão utilizá-lo.... Teria que adicionar o form em aproximadamente 15 projetos... entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o form num assembly separado e use injeção de dependência para fazer a carga do mesmo em tempo de execução.

 

http://www.ninject.org/

 

Ou simplesmente use Reflection manualmente para fazer a carga dinâmica do assembly e execução do método desejado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria algum material de como eu posso gerar uma DLL separada dessa minha classe? E como eu utilizo essa dll depois no outro projeto???

Obrigado.

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O próprio Visual Studio tem um tipo de projeto que chama Class Library, basta entrar e criar um novo projeto como class library, adicione seus códigos nestas classes e depois referencie normalmente como você referencia qualquer DLL.

 

Depois chame o namespace nomedonamespace.classe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.