C# - Exibindo uma lista de Itens - Uma abordagem OOP - II


Na segunda parte deste artigo vamos definir a camada de interface para exibir os itens da lista de compra usando as classes definidas na camada de domínio vista na  primeira parte.

Abra o projeto ListaComprasUI e em seguir o formulário form1.cs criado neste projeto e a partir da ToolBox inclua os seguintes controles no formulário:

Os controles serão dispostos conforme o leiaute da figura abaixo:

No início da declaração do formulário defina a variável totalCompras que será usada para armazenar o valor total das compras:

double totalCompras = 0;

No evento Load do formulário inclua a chamada ao procedimento InicializaListaBox() que deverá preencher o controle ListBox do formulário:

 private void Form1_Load(object sender, EventArgs e)
 {
       inicializaListBox();
 }

Crie o procimento inicializaListBox() conforme o código a seguir:

 private void inicializaListBox()
 {
            lbDados.Items.Clear();
            lbDados.Items.AddRange(new Alimento[] { new Banana(), new Tomate(), new Laranja() });
            lbDados.Items.AddRange(new Alimento[] { new Leite(), new Queijo(), new Laranja() });
            lbDados.Items.AddRange(new Alimento[] { new Ovo(), new Presunto(), new Salmao() });
            lbDados.Items.AddRange(new Alimento[] { new Cenoura(), new Alface() });
            lbDados.Items.AddRange(new Alimento[] { new Guarana(), new Agua()});
            totalCompras = 0;
 }

Aqui estamos criando instâncias das nossas classes para gerar os objetos que irão preencher o ListBox; Quando instanciamos um objeto Banana o construtor da classe base Alimento será usado para inicializar o objeto e assim sucessivamente.

No evento lbDados_SelectedIndexChanged do controle ListBox vamos limpar as mensagens de erro e chamar o procedimento ExibirItem para exibir os detalhes de um item selecionado:

       private void lbDados_SelectedIndexChanged(object sender, EventArgs e)
        {
            erro1.Clear();
            ExibirItem((Alimento) lbDados.Items[lbDados.SelectedIndex]);
        }

Neste codigo estamos realizando um conversão do item selecionado para o tipo Alimento: (Alimento) lbDados.Items[lbDados.SelectedIndex]

Crie o procedimento ExibirItem() que deverá exibir os detalhes de um item selecionado no controle ListBox nas caixas de texto do formulário:

        private void ExibirItem(Alimento _item)
        {
            txtCalorias.Text = _item.Calorias.ToString();
            txtCustoTotal.Clear();
            txtTipo.Text = _item.Tipo;
            txtUnidade.Text = _item.Unidade;
            txtPreco.Text = _item.Preco.ToString("C");
            if (_item.Custo != 0)
            {
                txtCustoTotal.Text = _item.Custo.ToString("C");
            }
        }

No evento Click do botão LimparLista() inclua o código que chama os procedimentos LimpaDetalhes() que limpa os controles TextBox e inicalizaListBox() que preenche o ListBox:

private void btnLimparLista_Click(object sender, EventArgs e)
{
            LimpaDetalhes(this);
            inicializaListBox();
}

O código do procedimento LimpaDetalhes(this) é dado abaixo:

private void LimpaDetalhes(Control ctrl)
{
            foreach (var c in ctrl.Controls)
            {
                if (c is TextBox)
                {
                    ((TextBox)c).Text = String.Empty;
                }
            }
 }

No evento CLick do botão Adicionar Item temos o código que obtém um objeto a partir de um item selecionado no ListBox e adiciona o item na lista de compras incrementando o valor das compras:

   private void btnAdicionarItem_Click(object sender, EventArgs e)
   {
            erro1.Clear();
            try
            {
                double quantidade = Convert.ToDouble(txtQuantidade.Text);
                Alimento item = (Alimento)lbDados.Items[lbDados.SelectedIndex];
                item.SetCusto(quantidade);
                txtCustoTotal.Text = item.Custo.ToString("C");
                txtQuantidade.Clear();
                totalCompras += item.GetCustoCompra(quantidade);
                txtValorTotal.Text = totalCompras.ToString("C");
            }
            catch (FormatException)
            {
                erro1.SetError(txtQuantidade, "Informe um valor");
                txtQuantidade.Focus();
                txtQuantidade.SelectAll();
            }
            catch (ArgumentOutOfRangeException)
            {
                erro1.SetError(lbDados, "Selecione um item da lista");
            }
    }

O código abaixo no evento Click do botão Remover Item obtém o item selecionado no ListBox removendo da lista de compras e decrementando o seu valor do total das compras:

 private void btnRemoverItem_Click(object sender, EventArgs e)
  {
            erro1.Clear();
            try
            {
                Alimento item = (Alimento)lbDados.Items[lbDados.SelectedIndex];
                 totalCompras -= item.Custo;
                 item.ResetarCusto();
                txtCustoTotal.Clear();
                txtQuantidade.Clear();
                txtValorTotal.Clear();
                if (totalCompras != 0)
                {
                    txtValorTotal.Text = totalCompras.ToString("C");
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                erro1.SetError(lbDados, "Selecione um item da lista");
            }
        }

Abaixo vemos um exemplo de execução da aplicação:

Pegue o projeto completo aqui :  ListaCompras.zip

Veja os Destaques e novidades do SUPER DVD Visual Basic 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Mat 6:1 Guardai-vos de fazer as vossas boas obras diante dos homens, para serdes vistos por eles; de outra sorte não tereis recompensa junto de vosso Pai, que está nos céus. (Jesus)

Referências:


José Carlos Macoratti