miica Posted June 14, 2013 at 04:45 PM Report #513000 Posted June 14, 2013 at 04:45 PM 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
legd1991 Posted June 14, 2013 at 05:37 PM Report #513011 Posted June 14, 2013 at 05:37 PM (edited) Cliente _cliente = new Cliente(); _cliente.Nome = TextBox1.Text; Edited June 14, 2013 at 05:38 PM by legd1991
miica Posted June 14, 2013 at 09:48 PM Author Report #513047 Posted June 14, 2013 at 09:48 PM 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
nelsonr Posted June 14, 2013 at 10:09 PM Report #513051 Posted June 14, 2013 at 10:09 PM Talvez possas mostrar como está a class de clientes
miica Posted June 14, 2013 at 10:43 PM Author Report #513058 Posted June 14, 2013 at 10:43 PM 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?
nelsonr Posted June 14, 2013 at 11:01 PM Report #513061 Posted June 14, 2013 at 11:01 PM 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);
miica Posted June 14, 2013 at 11:08 PM Author Report #513062 Posted June 14, 2013 at 11:08 PM 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?
nelsonr Posted June 14, 2013 at 11:09 PM Report #513063 Posted June 14, 2013 at 11:09 PM (edited) Sim, tens de guardar a morada que vem no parametro Edited June 14, 2013 at 11:10 PM by nelsonr
miica Posted June 15, 2013 at 10:20 AM Author Report #513088 Posted June 15, 2013 at 10:20 AM 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
nelsonr Posted June 15, 2013 at 10:34 AM Report #513089 Posted June 15, 2013 at 10:34 AM 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; // ... }
miica Posted June 15, 2013 at 10:57 AM Author Report #513093 Posted June 15, 2013 at 10:57 AM 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
nelsonr Posted June 15, 2013 at 11:19 AM Report #513095 Posted June 15, 2013 at 11:19 AM 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); } }
miica Posted June 15, 2013 at 11:52 AM Author Report #513097 Posted June 15, 2013 at 11:52 AM 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 😄
legd1991 Posted June 15, 2013 at 12:38 PM Report #513099 Posted June 15, 2013 at 12:38 PM (edited) Crias a class Cliente a parte sem ser no form1, depois metes assim: List<Cliente> listaClientes Edited June 15, 2013 at 12:51 PM by legd1991
miica Posted June 15, 2013 at 01:29 PM Author Report #513101 Posted June 15, 2013 at 01:29 PM 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
legd1991 Posted June 15, 2013 at 01:37 PM Report #513102 Posted June 15, 2013 at 01:37 PM Qual é o código que tens?
nelsonr Posted June 15, 2013 at 01:57 PM Report #513104 Posted June 15, 2013 at 01:57 PM ao fazer este codigo o "Form1.Cliente" a palavra cliente fica sublinhada. isto esta mais complicado do que eu pensava 😄 A class Cliente está criada no Form1, exacto? E está como publica, como no exemplo?
miica Posted June 15, 2013 at 02:12 PM Author Report #513106 Posted June 15, 2013 at 02:12 PM 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
nelsonr Posted June 15, 2013 at 03:00 PM Report #513109 Posted June 15, 2013 at 03:00 PM Então não é necessário colocares ali a parte do "Form1."
miica Posted June 15, 2013 at 05:19 PM Author Report #513139 Posted June 15, 2013 at 05:19 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now