Jump to content

Duvida Classes


D3POD
 Share

Recommended Posts

Boas, tenho vindo a desenvolver algumas coisas em c#, mas tenho evitado entrar na área das classes. Isto tem me obrigado a desenvolver imenso código pelo que decidi aprofundar a matéria.

Andei a ler vários tutoriais, vi alguns vídeos e não consigo descobrir o porquê de não conseguir passar um valor entre dois forms com uma class.

No form1 apenas tenho uma textbox e um botão... a ideia é ao clicar no botão o valor ser transferido para a textbox que tenho no form2.

Código botão do form1:

private void btn_transfer_Click(object sender, EventArgs e)
 {
	 cliente n1 = new cliente();
	 n1.Nome = txt_nome.Text;
	 Form2 f2 = new Form2();
	 f2.Show();
 }

Código da classe:

public class cliente
{
 public string _nome;
 public string Nome
 {
	 get { return _nome;}
	 set { _nome = value;}
 }

e código do load do form2:

private void Form2_Load(object sender, EventArgs e)
 {
	 cliente n1 = new cliente();
	 textBox1.Text = n1.Nome;
 }

Alguem que me possa explicar onde é que estou a cometer o erro?

Cumprimentos,

d3pod

Link to comment
Share on other sites

Aqui, estás a criar uma variavel nova com o nome n1 do tipo cliente.

Como esta variavel está a ser criada dentro da função, apenas está disponivel dentro dessa função.

private void btn_transfer_Click(object sender, EventArgs e)
{
       cliente n1 = new cliente();
       n1.Nome = txt_nome.Text;
       Form2 f2 = new Form2();
       f2.Show();
}

Aqui estás a criar uma nova com o nome n1, do tipo cliente.

Esta variavel também só está disponivel dentro da função Form2_Load, e não tem nada a ver com a outra criada no form1 (apesar de terem o mesmo nome).

private void Form2_Load(object sender, EventArgs e)
{
       cliente n1 = new cliente();
       textBox1.Text = n1.Nome;
}

Quando fazes o "new", estás a criar uma nova instancia da classe.

Mas isso não tem a ver com o ser classes ou não.

Imagina que fazias a mesma coisa com uma variavel do tipo int, ia dar no mesmo.

private void btn_transfer_Click(object sender, EventArgs e)
{
       int n1 = 123;
       Form2 f2 = new Form2();
       f2.Show();
}

private void Form2_Load(object sender, EventArgs e)
{
       int n1 = 456;
       textBox1.Text = n1.ToString();
}
  • Vote 1
Link to comment
Share on other sites

Já não me lembro muito bem de Win Forms, espero não dizer nenhuma barbaridade.

Penso que podes ter um constructor no form2 a receber um objecto do tipo cliente e também no form2, ter uma variável global do tipo cliente. Depois, dentro desse constructor igualas as duas para ficarem com o mesmo "valor".

Acho que outra opção é teres essa tal variável do tipo cliente dentro do form2 e simplesmente fazer f2.cliente1 = n1 (cliente1: nome do objecto do tipo cliente dentro do form2).

Espero estar certo, pois já não mexo em windows forms à algum tempo, mas pelo menos tento ajudar-te.

Cumprimentos.

Software is like sex: It’s better when it’s free.
Link to comment
Share on other sites

Como posso utilizar então de forma a que os valores sejam passados pela class?

No outro topico que tinhas criado com as mesmas funções, dei um exemplo.

https://www.portugal-a-programar.pt/topic/65510-duvida-com-utilizacao-de-classes/

Podes criar no form2 uma variavel publica geral do tipo cliente e no form1, depois de criares uma instancia do form2, tens acesso à variavel usando nomevariavelform2.variavel.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.