Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Loismig

Variáveis das Classes

Mensagens Recomendadas

Loismig    0
Loismig

Bem, o objetivo do programa é o seguinte:

Tenho um form que é para Registar o nome e a idade e outro form para mostrar os mesmos. Só que eu quero fazer isso usando uma Class.

Form onde faço o registo e o seu código:

Registar.jpg

private void btnRegistar_Click(object sender, EventArgs e)
	{
		Lista lista = new Lista();
		lista.nome = txtNome.Text;
		lista.idade = Convert.ToInt16(txtIdade.Text);
	}

Form onde o objetivo é clicar no botão "Mostrar" e aparecer os dados mas não estou a conseguir.

mostrar.jpg


private void btnMostrar_Click(object sender, EventArgs e)
	{
		Lista lista = new Lista();
		txtNome.Text = lista.nome;
		txtIdade.Text = Convert.ToString(lista.idade);
	}

Código da Class:

namespace Contactos
{
class Lista
{
	public string nome;
	public int idade;
}
}

Alguém me pode dar uma mãozinha e dizer porque não está a ir buscar os valores a class? Obrigado :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger    50
Flinger

Tens de entender melhor como funcionam as variáveis e classes.

private void btnMostrar_Click(object sender, EventArgs e)
		    {
				    Lista lista = new Lista();
				    txtNome.Text = lista.nome;
				    txtIdade.Text = Convert.ToString(lista.idade);
		    }

A primeira linha cria-te um variável, chamada lista, e que é do tipo Lista. Esta variável, quando é criada, está basicamente vazia, ou com os dados que o teu construtor "new Lista()" lá colocar. Como tu na classe Lista não declaraste um construtor, as variáveis de classe (nome e idade) estão a zero.

Por isso o form te aparece com os campos 0, na idade e uma string vazia no nome.

No teu btnRegistar_Click tu assignas os valores a uma variável da classe Lista, mas essa variável apenas existe dentro do método btnRegistar_Click. Assim que a método termina, a memória onde a variável está armazenada é libertada para o S.O., deixando de ser acessível ao teu programa.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Loismig    0
Loismig

Então, supostamente, como tem que ficar?

Já tentei procurar na net e tentar fazer mas não consegui :\

Obrigado pela resposta!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger    50
Flinger

Para ser sincero não tenho bem a certeza, já que raramente usei Windows forms em C#, mas pode haver várias maneiras. Uma delas é criares uma variável de class no teu form, do tipo Lista .Ao fazeres set dos valores, ao invés de criares uma nova variável, usas a do form. Sendo public, podes então passar essa variável para o form2, no constructor, que pode então fazer o set dos campos, ou então, o próprio form2 ter uma variável de class do tipo Lista, que é preenchida pelo constructor, e os campos de texto vão buscar lá a informação.

Sendo c# até pode ser uma Propriedade da classe do form, e não uma variável, etc... existem mesmo n maneiras.

Vai tentando... Se não conseguires posta o código completo das 2 classes dos forms, que eu dou uma mão.

Mais uma vez, c# não é a minha melhor linguagem, tudo o que sei é auto ensinado, pelo que os exemplos que dou podem não ser as melhores práticas.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Loismig    0
Loismig

Pois, estou na mesma situação que tu, também estou aprender por mim próprio.

No meu curso estou a dar Visual Basic mas eu também quero aprender C# pois acho que é onde tem mais saídas e é mais preciso/utilizado e a empresa onde vou estagiar, também utilizam C# logo quero ir já um pouco preparado e com algumas bases.

Voltando a situação do problema ..

Se eu fizer da mesma forma como tenho no primeiro post, funciona se for tudo no mesmo Form. Agora em forms diferentes não apresenta os valores.

Já tentei utilizar o set e o get e mesmo assim não estou a conseguir.

Vou tentar pesquisar mais um bocado e tentar fazer e já posto qualquer coisa :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger    50
Flinger

Tens aqui um exemplo de como passar dados entre forms (usando o constructor do form como te disse).

Lembra-te que a tua class (Lista) funciona como um tipo de dados, neste caso. Podes passar uma variável desse tipo para dentro de um form.

Uma coisa que te parece faltar é a noção de objectos. Ao te atirares ao c#, tenta aprender programação por objectos. É o modelo correcto, e normalmente quando se ensina VB ignora-se completamente o paradigma (apesar de a linguagem já estar orientada para ele). Na minha opinião, VB devia deixar de ser ensinado.

Procura um bom tutorial para programação por objectos, pode mesmo ser java, já que é bastante similar, e as diferenças são rapidamente ultrapassáveis se aprenderes bem o modelo.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Loismig    0
Loismig

Pois, sinceramente eu não gosto muito de programar muito em VB apesar de já fazer muita coisa e já estar a vontade com a linguagem.

E se eu quisesse fazer isto em VB, eu conseguia pois já fiz alguns projetos utilizando classes e facilmente o conseguia fazer.

Quanto a a tua dica, aprender java primeiro e depois ir para C#?

Porque não aprender C# diretamente?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Flinger    50
Flinger

Eu não disse para aprenderes Java primeiro... Eu disse para aprenderes programação por objectos, mesmo que o tutorial que escolhas use Java... A nível de iniciante, nas classes e objectos, as diferenças são mínimas, sendo que a principal é o uso de propriedades no C# (e creio que a nível de heranças existem algumas diferenças, mas já num 2.º Nível).

É mais importante o facto de entenderes correctamente os objectos do que a linguagem usada... Para teres uma ideia, eu aprendi POO com Java, e quando precisei usar C# facilmente me adaptei...

Claro que se tiveres um bom tutorial já em C#, melhor para ti. Só que pela rápida pesquisa que fiz, não me parece existirem muitos... A maior parte dos tutoriais passa directo para os Windows forms, o que não me parece grande ideia para aprender POO.

Editado por Flinger
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.