ALTERAR PROPRIEDADES DE OBJETOS EM OUTRO FORM

MLALEX 29/10/2016 21:25:12
#468566
Olá pessoal!!

A vida toda programei no VB6. Agora resolvi programar no Visual Studio 2015 VB. Eu não entendo porque eles alteram coisas simples sem um motivo aparente.

No VB6, se eu preciso alterar o valor de um TextBox no form1 estando em outro form, eu simplesmente faço assim:

Form1.Textbox1.Text = [Ô]Simples assim[Ô]

No Visual Studio VB isso não funciona nem a porrete.

Já declarei o form = Public Frm1 As New Form1
Os objetos são reconhecidos mas seus valores não se alteram

Agora se mando o form1 que já está aberto abrir novamente, Form1.Show(), Abre-se novamente o form1 (ficam 2 na tela) um com valor alterado e o original nada.


Como faço isso agora??
JABA 29/10/2016 22:21:27
#468567
Resposta escolhida
Você precisa compreender o funcionamento de INSTÂNCIA.

pt.wikipedia.org/wiki/Inst%C3%A2ncia_(classe)

Como você criou uma instância com o nome de Frm1, você precisa utiliza-la com este nome.

Public [txt-color=#e80000]Frm1 [/txt-color]As New Form1

[txt-color=#e80000]Frm1 [/txt-color].Textbox1.Text = [Ô]Simples assim[Ô]
MLALEX 30/10/2016 12:09:59
#468580
Na verdade Jaba, isso foi só um erro de digitação. Eu fiz da forma que você disse. Veja um exemplo real. Eu mantenho o FrmInicio e o Form2 abertos. Em um botão eu tenho o código abaixo:

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim FrmInicio As New FrmInicio

FrmInicio.LblConexao.Text = [Ô]Teste[Ô]
FrmInicio.LblConexao.BackColor = Color.Red
End Sub


Esse código não dá erro algum, mas também não atualiza o FrmInicio.

Agora se utilizo FrmInicio.Show(), ele abre uma cópia do FrmInicio com as informações atualizadas, mas fico com 2 FrmInicio abertos. Isso não tá certo.

Será que estou trabalhando com um template errado?? Estou utilizando o Windows Form Application. Será que não existe um que o comportamento seja idêntico ao VB6?
Console Application por exemplo?? Vou testar para ver o que acontece...

(05 minutos depois...) testei com o console mas não deu certo não. E agora???
DS2T 30/10/2016 12:22:29
#468581
Quando você inicia seu projeto, precisa ter um formulário principal... que é justamente esse primeiro formulário aberto. Então já existe uma instância desse formulário... você só precisa fazer isso:

LblConexao.Text = [Ô]Teste[Ô]
LblConexao.BackColor = Color.Red

Já que os labels estão dentro do escopo do formulário.

Vale a pena pegar um livro e dar uma estudada, pelo menos no básico.

Abraços.
JABA 30/10/2016 13:34:04
#468583
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim FrmInicio As New FrmInicio

FrmInicio.LblConexao.Text = [Ô]Teste[Ô]
FrmInicio.LblConexao.BackColor = Color.Red
End Sub


Toda vez que você cria uma instância, ele se torna um outro objeto na memória. Você está criando uma nova instância do form, e pra piorar, como uma variável local. Ou seja, agora existem duas instâncias (dois forms) na memória: uma que a plataforma criou pra você e essa aí criada localmente.
MLALEX 30/10/2016 20:10:48
#468594
Citação:

Você está criando uma nova instância do form, e pra piorar, como uma variável local.



Entendi isso PERFEITAMENTE!! VALEU A INFORMAÇÃO.

Agora, JURO PRÁ VOCÊS, ontem fiz mais de 20 tentativas usando a forma que seria no VB6, onde não precisa criar instância alguma. HOJE, sem explicação, o código abaixo SIMPLESMENTE FUNCIONOU.

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
FrmInicio.LblConexao.Text = [Ô]Teste[Ô]
FrmInicio.LblConexao.BackColor = Color.Red
End Sub


Ou eu estou rezando pouco e tem macumba no meu computador ou deu algum problema no VS que se resolveu sozinho.

Peço desculpas por ocupar o tempo de vocês com um problema tão simples, mas o código acima realmente não funcionou ontem.

MUITO OBRIGADO PELA ATENÇÃO!! GRANDE ABRAÇO.
Tópico encerrado , respostas não são mais permitidas