Ir para conteúdo

Arquivado

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

ZecaLoteiro

Invoke Reflection Raising Events?

Recommended Posts

Boa tarde,

 

Preciso implantar em todas as telas do meu sistema um metodo de navegação pela tecla enter.

Pra isso, estou adicionando o seguinte código:

Public Shared Sub inicializaForm(ByVal formulario As Form)
    formulario.KeyPreview = True
    AddHandler formulario.KeyPress, AddressOf programaEnter
  End Sub
Public Shared Sub programaEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
    If Asc(e.KeyChar) = 13 Then
      System.Windows.Forms.SendKeys.Send("{TAB}")
      e.Handled = True
    End If
 End Sub

 

E adicionei em todos os forms a linha:

 

inicializaForm(Me)

 

Mas acontece que alguns controles possuem seu próprio evento de KeyPress, e quando coloco o KeyPress no form, ele ignora as instruções no evendo do controle, e executa somente o KeyPress do form... :(

 

Uma solução simples, seria chamar após executar o evento do Form.KeyPress, chamar o evento do Controle.KeyPress, mas como fazer isso????

 

Pensei em algo como:

 

DirectCast(sender, Form).Invoke(AddressOf controle.KeyPress)

 

Mas isso não funciona, alguém pode me ajudar?

Como chamar um evento de um outro controle?

 

Desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou fazer isso pelo tipo de controle?

 

eu fiz algo parececido com os textbox.

 

criei uma class que herdava da classe FORM e coloquei todos os meus formulários herdando dessa classe.

 

la criei um load que pegava o form que iniciava e percorria todos os controles, e todos que eram Textbox adicionava o event.KeyPress

 

essa foi a forma mais simples que encontrei de colocar eventos em todos os controles de input de texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeeeu!

 

Hum... assim realmente funcionou.... ;)

Adicionei mais um handler em cada objeto do form e dessa forma executa as duas ações.

 

Mas a dúvida permanece, como posso dar um Invoke, de uma função já existente?

Tipo, Form.KeyPress -> executa tudo oq tem q executar, e ao final executa o Form.ActiveControl.KeyPress ?

 

Obrigado pela força.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem alguns meios que não são por reflection e nem invoke, mas sim por métodos comuns, você pode executar todas as funções do keypress "universal" e depois utilizar-se do próprio keypress do form para executar a função que você quer, porém você precisa criar o método do evento manualmente sem nenhuma handler e depois invocar o RaiseEvent

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.