VALORES ENTRE FORMUL?RIOS - USANDO PROPRIEDADES

W8.LISBOA 23/04/2016 13:15:48
#461289
Olá amigos;

Estou tentando passar valores entre formulários usando propriedades, porem fiquei presso na seguinte situação:

Tenho 03 formulários:

Formulários de inicialização [Ô]base[Ô] (Tela Inicial)
Formulário de cadastro [Ô]form1[Ô]
formulário filtro [Ô]form2[Ô] ( quero passar o valor do formulário filtro para o formulário cadastro)

Quando o [Ô]form1[Ô] é aberto instanciado não consigo enviar dados do [Ô]form2[Ô] para o [Ô]form1[Ô].

 Public Class Base  
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim frm01 As Form1 = New Form1
frm01.ShowDialog()
[ô] Não consigo passar os valores de [Ô]form2[Ô] para [Ô]form1[Ô]

[ô]Form1.ShowDialog()
[ô]funciona
End Sub
End Class


  Public Class Form1
Friend WriteOnly Property ValorRecebido As String
Set(ByVal value As String)
TextBox1.Text = value
End Set
End Property

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim frmFiltro As Form2 = New Form2
frmFiltro.ShowDialog()
End Sub
End Class


 Public Class Form2
Private ReadOnly Property ValorEnviado As String
Get
Return TextBox1.Text
End Get
End Property

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form1.ValorRecebido = ValorEnviado
End Sub
End Class


Gostaria de abrir o [Ô]form1[Ô] instanciado e que a rotina do filtro funcione, é possível?
JABA 23/04/2016 13:35:24
#461290
No vb.net não é necessário criar as instâncias para exibi-lo.
W8.LISBOA 23/04/2016 13:47:11
#461291
Citação:

:
No vb.net não é necessário criar as instâncias para exibi-lo.



Caro amigo JABA, tenho usuários com PC[ô]s de baixa qualidade, e notei que ao instanciar a abertura de um form, este processo ocorre de forma rápida, caso contrario o processo de load fica lento pra caramba, e olha que só tenho um pequena rotina ao abrir o formulário.

é possível reverter este [Ô]atraso[Ô] de alguma forma?

JABA 23/04/2016 14:16:08
#461292
Citação:

Caro amigo JABA, tenho usuários com PC[ô]s de baixa qualidade, e notei que ao instanciar a abertura de um form, este processo ocorre de forma rápida, caso contrario o processo de load fica lento pra caramba, e olha que só tenho um pequena rotina ao abrir o formulário.

é possível reverter este [Ô]atraso[Ô] de alguma forma?



Bom, não sei o que faria os forms ficarem mais rápidos criando-se instâncias manualmente, já que elas acabam sendo criadas de qualquer jeito pela plataforma. Pode até ser que você tenha razão, mas será que o problema não seria outro?
W8.LISBOA 23/04/2016 14:29:31
#461293
Citação:

:
Bom, não sei o que faria os forms ficarem mais rápidos criando-se instâncias manualmente, já que elas acabam sendo criadas de forma automática pela plataforma. Pode até ser que você tenha razão, mas será que o problema não seria outro?



Acredito nessa tese, no entanto por algum motivo realmente usando instancias consigo melhorar o load do form, isso em PC[ô]s de baixo processamento. Dai surgiu a necessidade de adaptar aquela rotina de passagens de valores via propriedades.
KERPLUNK 23/04/2016 20:33:47
#461302
Crie um overload de [Ô]ShowDialog[Ô] no seu form que receba parâmetros. Ao instanciar com o método [Ô]ShowDialog[Ô], passe os parâmetros que quiser.
ACCIOLLY 24/04/2016 00:22:17
#461311
Vou te dar uma idéia simples.
Use o método construtor no form2. E passe os valores através dele

Public Class Form2
[ô]variavel que deseja alimentar
Dim ValorRecebido As String

[ô]método construtor da classe
Public Sub New(ByVal ValorPassado As String)

[ô]e aqui passo o valor para variavel de classe
ValorRecebido = ValorPassado

End Sub

End Class


E aí quando for instanciar o form2 pra chama-lo é só passar o valor que vc quer entre parenteses

Dim frm2 As New Form2([Ô]João Maria e José[Ô])


Simples assim

Qualquer coisa dá uma lida nesse tutorial do Macoratti
http://www.macoratti.net/vbn_bas8.htm

Outra coisa simples que você também pode fazer é criar uma classe com atributos estáticos e setar valores neles. Assim independente se o form que setou os valores estiver aberto ou não os valores vão estar gravados lá de todo jeito né!

Té mais
W8.LISBOA 24/04/2016 13:13:57
#461323
Caro ACCIOLLY, não conseguir por em pratica seu método, acontece que preciso passar o valor ao form que já esta aberto em um instancia, e não instanciar o form já com os valores. No anexo consegue ter uma ideia melhor.

KERPLUNK estou estudando sua sugestão, agradeço!
ACCIOLLY 25/04/2016 10:41:54
#461354
Resposta escolhida
Veja se assim serve
criei uma classe (valores) com um atributo estático (valor)
no form1 criei uma instancia do form2 na classe e não no método.
no evento do botão do form1 abro a instancia do form2
e habilito um timer que vai verificar quando o form2 for fechado.
no form2 o evento do botão envia a informação para o atributo estático da classe valores e fecha o form2.
ao fechar o form2 o evento do timer no form1 irá detectar que o form2 fechou e irá executar o método preencher pegando o valor do atributo estático na classe valores.
No mais é isso.
espero que te ajude
Té mais
W8.LISBOA 25/04/2016 18:59:25
#461381
Citação:

:
Veja se assim serve
criei uma classe (valores) com um atributo estático (valor)
no form1 criei uma instancia do form2 na classe e não no método.
no evento do botão do form1 abro a instancia do form2
e habilito um timer que vai verificar quando o form2 for fechado.
no form2 o evento do botão envia a informação para o atributo estático da classe valores e fecha o form2.
ao fechar o form2 o evento do timer no form1 irá detectar que o form2 fechou e irá executar o método preencher pegando o valor do atributo estático na classe valores.
No mais é isso.
espero que te ajude
Té mais



Grande ACCIOLLY, fiz uma pequena alteração na abertura do form filtro, estava retornando um exceção caso tentasse abri-lo depois de fechado.

Vau deixar o tópico aberto por um tempo caso queira fazer alguma consideração.
ACCIOLLY 25/04/2016 22:41:00
#461388
Melhor q resolver em 1 é resolver em 2 ou mais! Como viu duas cabeças pensam melhor do que uma! Ou seja te mostrei uma soluçao e vc melhorou! Kkkkkkkk
Tópico encerrado , respostas não são mais permitidas