Jump to content
miica

Pequena ajuda para iniciantes em ambiente com formularios

Recommended Posts

miica

Boas malta,

Precisava de uma pequena ajuda em C# em ambiente de formularios. Eu não tenho muita pratica neste ambiente, ja fiz alguns programas onde estudo mas foi em console.

a minha duvida é a seguinte, tenho que fazer um codigo que permita o registo de clientes. Já tenho criado a classe cliente. Queria saber como faço para ao clicar num botao, por exemplo o nome do cliente que tenho escrito em determinada textbox passar para a propriedade da classe que guarde o nome para os clientes

cumps

Share this post


Link to post
Share on other sites
legd1991
Cliente _cliente = new Cliente();
_cliente.Nome = TextBox1.Text;

Edited by legd1991

Share this post


Link to post
Share on other sites
miica

Cliente _cliente = new Cliente();
_cliente.Nome = TextBox1.Text;

obrigado pela ajuda,

eu coloquei esse codigo so que a parte do "new Cliente()" fica-me sublinhado a vermelho. sabe-me dizer como devo ter o construtor da classe para que não me de este erro

Share this post


Link to post
Share on other sites
miica

public class Cliente

{

public int Codigo { get; private set; }

public string Nome { get; set; }

public string Morada { get; set; }

public Cliente(int cod, string nome, string morada = "")

{

Codigo = cod;

Nome=nome;

}

}

para já tenho so para estes campos referentes aos clientes. digam-me os mais entendidos fazer so com estes campos ou mais é igual, certo?

Share this post


Link to post
Share on other sites
nelsonr

A class apenas tem um constructor em que tens de passar o codigo e nome (morada opcional)

Assim, ajustando o codigo do legd1991, pode ser algo assim

Cliente _cliente = new Cliente(1, TextBox1.Text);

Share this post


Link to post
Share on other sites
miica

A class apenas tem um constructor em que tens de passar o codigo e nome (morada opcional)

Assim, ajustando o codigo do legd1991, pode ser algo assim

Cliente _cliente = new Cliente(1, TextBox1.Text);

sim a morada esta como opcional. sendo opcional dentro do contrutor tenho que ter Morada=morada; ou não é necessario uma vez que é opcional?

Share this post


Link to post
Share on other sites
nelsonr

Sim, tens de guardar a morada que vem no parametro

Edited by nelsonr

Share this post


Link to post
Share on other sites
miica

A class apenas tem um constructor em que tens de passar o codigo e nome (morada opcional)

Assim, ajustando o codigo do legd1991, pode ser algo assim

Cliente _cliente = new Cliente(1, TextBox1.Text);

eu ja coloquei este codigo e está a funcionar, tenho agora outro problema, eu queria que estes dados que estou a guardar desse para serem vistos num outro formulario atraves de uma listbox, mas assim como tenho deve-me depois nesse formulario dar erro

Share this post


Link to post
Share on other sites
nelsonr

Como é que estás a preencher a listbox?

Deve ser algo assim:

listBox1.Items.Add(_cliente.Nome);

No entanto, é aconselhavel fazeres de outra maneira, adicionar o próprio objecto (facilita para depois leres os dados do cliente selecionado).

Para isso, adicionas na class do cliente, indicação do que deve retornar quando a class é convertida para string


public class Cliente
{
  // ...

  // Indicar que quando converte a class para string, deve retornar o nome do cliente
  public override string ToString()
  {
  return(Nome);
  }

  // resto da class

Depois podes adicionar o objecto à lista assim:

listBox1.Items.Add(_cliente);

Para depois leres o cliente selecionado na lista, podes usar algo assim;

// Confirmar que existe um item selecionado
if(listBox1.SelectedIndex>=0)
{
  // Ler object selecionado, fazendo o cast para Cliente
  Cliente _clienteSelecionado=(Cliente)listBox1.SelectedItem;

  // ...
}

Share this post


Link to post
Share on other sites
miica

essa parte de codigo para adicionar à listbox coloco quando o form é aberto?? o que eu pretendo é ter um formulario onde tenho varias textbox onde introduzo os dados e ao clicar no botao para guardar ele passe os dados para a classe(esta parte ja fiz) e queria noutro formulario ao abrir parecer na listbox a listagem de todos os dados que tenho na classe. n sei se sera esta a melhor opção, mas como tambem nao percebo muito disto parece ser

Share this post


Link to post
Share on other sites
nelsonr

Entao tens um formulario para preencher os dados dos clientes, em que tens 2 botoes: um para adicionar os dados ao cliente e outro para abrir um novo form com a listbox dos clientes introduzidos?

Indo por partes, podes fazer mais ou menos estes passos:

- No form 1 tens as textboxs para preencher os dados do cliente, e crias também uma lista onde vais guardar os clientes adicionados. Algo assim:

public partial class Form1 : Form
{
  public class Cliente
  {
  //...
  }
  // Criar uma lista para guardar os clientes
  List<Cliente> listaClientes = new List<Cliente>();
  // Guardar o proximo codigo unico do cliente
  int ProximoCodigo=1;

  // ...

  // No evento do click do botão adicionar
  private void button1_Click(object sender, EventArgs e)
  {
  // Crias um novo objecto do cliente e preenches os dados das textboxs
  // No primeiro parametro, utiliza o contador atual
  Cliente _cliente=new Cliente(ProximoCodigo, txtNome.Text, txtMorada.Text);

  // Adicionas o novo cliente à lista
  listaClientes.Add(_cliente);

  // Incrementa o código a usar no proximo cliente
  ProximoCodigo++;

  // Podes limpar os dados para um novo cliente
  txtNome.Text="";
  txtMorada.Text="";
  }

  // No evento do click do botão para abrir o form que tem a listbox
  private void button2_Click(object sender, EventArgs e)
  {
  // Crias um novo objecto do tipo do form2
  Form2 form2=new Form2();

  // Chamas um metodo publico com a lista de clientes a preencher
  form2.PreencheLista(listaClientes);

  //
  form2.Show();
  }
}

Depois no form2 (onde tens a listbox), adicionas o metodo para preencher a listbox

public partial class Form2 : Form
{
  // ...


  public void PreencheLista(List<Form1.Cliente> listaClientes)
  {
  foreach (Form1.Cliente _cliente in listaClientes)
	 listBox1.Items.Add(_cliente);
  }
}

Share this post


Link to post
Share on other sites
miica

Depois no form2 (onde tens a listbox), adicionas o metodo para preencher a listbox

public partial class Form2 : Form
{
  // ...


  public void PreencheLista(List<Form1.Cliente> listaClientes)
  {
  foreach (Form1.Cliente _cliente in listaClientes)
	 listBox1.Items.Add(_cliente);
  }
}

ao fazer este codigo o "Form1.Cliente" a palavra cliente fica sublinhada. isto esta mais complicado do que eu pensava :D

Share this post


Link to post
Share on other sites
legd1991

Crias a class Cliente a parte sem ser no form1, depois metes assim:

List<Cliente> listaClientes

Edited by legd1991

Share this post


Link to post
Share on other sites
miica

Crias a class Cliente a parte sem ser no form1, depois metes assim:

List<Cliente> listaClientes

este codigo é na mesma dentro do form certo?? com o que tenho só me esta a passar para a listbox o nome

Share this post


Link to post
Share on other sites
nelsonr

ao fazer este codigo o "Form1.Cliente" a palavra cliente fica sublinhada. isto esta mais complicado do que eu pensava :D

A class Cliente está criada no Form1, exacto?

E está como publica, como no exemplo?

Share this post


Link to post
Share on other sites
miica

eu nem tinha reparado que a classe estava criada no form neste exemplo que mostras-te. eu no meu programa a classe nao esta criada em nenhum form, esta criada À parte

Share this post


Link to post
Share on other sites
miica

Acho que vou deixar isto assim, é mais complicado do que pensava. eu ja estou a conseguir passar alguma coisa para o listbox, passa so é o nome o codigo e a morada nao me esta a passar

Share this post


Link to post
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

×
×
  • 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.