Olá Senhores.
Tenho uma dúvida sobre como acessar um objeto instanciado na mesma classe, mas em metodos diferente em C# e utilizando com Forms.
Um resumo da aplicação:
Há um botão de cadastro em um Form, quando o usuario clica nele objeto é instanciado e preenchido com os valores dos TextBox do Form.
Neste mesmo form há um botão excluir (button1) e nele eu preciso acessar este objeto já instanciado no botao de cadastro, mas não sei como faze-lo.
Grato.
[code] private void btcadastro_Click(object sender, EventArgs e)
{
Equipamento equip = new Equipamento();
equip.Cod = txcod.Text;
equip.Ano = txano.Text;
equip.Desc = txdesc.Text;
equip.Peso = float.Parse(txpeso.Text);
equip.Volt = comboBox1.Text;
equip.inserirNoEstoque(txcod.Text);
listcod.Items.Add(equip.Cod);
listano.Items.Add(equip.Ano);
listestoque.Items.Add(equip.QEst);
listdesc.Items.Add(equip.Desc);
listvolt.Items.Add(equip.Volt);
listpeso.Items.Add(equip.Peso);
}
private void FormEquip_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
///Preciso acessar o objeto equip daqui!
}[/code]
Do modo que você fez não seria possível. Você instanciou este objeto dentro do método e ele somente irá ser acessível neste método.
Você pode declarar este objeto do tipo Equipamento como uma variável global, e instancia-la no método em questão.
private Equipamento equip = null;
private void btcadastro_Click(object sender, EventArgs e)
{
equip = new Equipamento();
equip.Cod = txcod.Text;
equip.Ano = txano.Text;
equip.Desc = txdesc.Text;
equip.Peso = float.Parse(txpeso.Text);
equip.Volt = comboBox1.Text;
equip.inserirNoEstoque(txcod.Text);
listcod.Items.Add(equip.Cod);
listano.Items.Add(equip.Ano);
listestoque.Items.Add(equip.QEst);
listdesc.Items.Add(equip.Desc);
listvolt.Items.Add(equip.Volt);
listpeso.Items.Add(equip.Peso);
}
private void FormEquip_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
//Preciso acessar o objeto equip daqui!
// Agora você pode acessa-lo de qualquer método desta classe
}
Existem outras maneiras!
Obrigado pela resposta diego123321 !
Vou alterar a aplicação e posto o resultado.
Algumas observacoes a respeito do seu codigo:
Quando vc criar um novo equipamento, vc adiciona em uma lista nao eh?
Porque quando vc clicar no botao1 (delete) vc pega o item selecionado nessa lista, ai passa o codigo do equipamento para algum metodo que faz o delete ???
Nao faz muito sentido acessar a instancia do Equipamento, porque se vc criar 10 Equipamentos seguidos e clicar para deletar vc vai deletar somente a ultima instancia que vc criou.
Outra, melhor vc rever o design desse seu programa, porque tipo:
Primeiro vc criar uma instancia do Equipamento e depois roda o metodo inserirNoEstoque passando o codigo??
equip.Cod = txcod.Text;
equip.Ano = txano.Text;
equip.Desc = txdesc.Text;
equip.Peso = float.Parse(txpeso.Text);
equip.Volt = comboBox1.Text;
equip.inserirNoEstoque(txcod.Text);
Nao seria melhor ter uma classe que seja responsavel pela persistencia do tipo Equipamento?
Ou se vc quiser deixar um metodo inserir nesse objeto, vc poderia definir o seu metodo um pouco diferente:
public bool InserirNoEstoque(this equipamento) { }
Porque ai vc esta usando a instancia que vc acabou de criar, caso contrario vc nao usa aquela instancia para nada.
Esses metodos sao chamados de Extension Methods, se vc quiser saber mais:
http://msdn.microsoft.com/en-us/library/bb383977.aspx
Uma ultima coisa:
inserirNoEstoque eh um metodo da class Equipamento? Se for o caso, vc precisa usar a notacao Pascal Case que tb eh conhecida por Upper Camel Case. Na verdade vc usou Camel Case quando colocou o nome nesse metodo.
Pascal Case eh bastante similar ao Camel Case a unica diferenca eh que vc sempre inicia com letra maiuscula, entao ficaria: InserirNoEstoque
//Daniel
windsofhell,
Desculpe-me, não fui claro na descrição, essa aplicação não tem persistencia.
Os dados são capturados dos TextBox, setados nos atributos do objeto e adicionados no Listbox , quando é clicado o Botao btcadastro.
Quando é selecionado uma celula do listbox, e clicado em button1 (retirar do estoque), ele subtrai (1 unidade) do atributo estoque daquele objeto, e altera o listbox de estoque deste objeto.
Obrigado pela observação do inserirNoEstoque.
Vou alterar e posto o resultado.
Sou iniciante em C#, neste exercício não foi pedido a utilização de persistencia.
A solução encontrada , foi preencher os listBoxes e depois instanciar um novo objeto no outro Form, recuperando as informações preenchidas previamente nos Listboxes.
Sei que isto não é nem um pouco funcional, serviu apenas para exercitar o preenchimento e captura de dados dos Forms e conclusão do exercicio.
Grato.