Listbox - Multiply values and move to another Listbox

Asked

Viewed 514 times

0

I have 2 Listbox.

When I pass a value to the other Listbox opens a screen to enter the amount I want of that product.

That said, it will take the quantity * value and show in the other Listbox.

inserir a descrição da imagem aqui

Code that loads the listbox:

private void frmOrdemServico_Load(object sender, EventArgs e)
        {


            string[] lineOfContents = File.ReadAllLines(@"C:\\Users\\willian\\Downloads\\dbClientes.txt");
            cbClientes.Items.Clear(); // limpar para não duplicar valores
            foreach (var line in lineOfContents)
            {
                string[] nomes = line.Split(',');
                cbClientes.Items.Add(nomes[0]);
            }
               // Preencher ListBox
            string[] d = File.ReadAllLines(@"C:\\Users\\willian\\Downloads\\dbProdutos.txt");
            foreach (var line in d)
            {
                string[] produtos = line.Split(';');
                lbProdutos.Items.Add(produtos[0] + " R$" + Convert.ToDouble(produtos[1]));
            }
        }

I can do multiply only if I do this, on this line:

lbProdutos.Items.Add(produtos[0] + " R$" + Convert.ToDouble(produtos[1])*2);

But I cannot do when I pass the value by this Forms.

Code to pass the products to the right:

private void btnIr_Click(object sender, EventArgs e)
        {
            frmQuantidade qntd = new frmQuantidade();
            qntd.ShowDialog();


            if (lbProdutos.SelectedItem == null)
            {
                MessageBox.Show("Você não selecionou nenhum produto para adicionar");
            }
            else
            {
                lbProdutosUsando.Items.Add(lbProdutos.SelectedItem);
                lbProdutos.Items.Remove(lbProdutos.SelectedItem);
            }
        }

Code to pass products to left:

private void btnVoltar_Click(object sender, EventArgs e)
        {
            if (lbProdutosUsando.SelectedItem == null)
            {
                MessageBox.Show("Você não selecionou nenhum produto para remover");
            }
            else
            {
                lbProdutos.Items.Add(lbProdutosUsando.SelectedItem);
                lbProdutosUsando.Items.Remove(lbProdutosUsando.SelectedItem);
            }
        }

In this other topic I did a person answered using Listview, it was OK but I am in the same situation as Listbox. Listbox - how to show full product name and bring up another column of values

UPDATE

I believe I did what @Fernando said in his reply, but I will have this error as shown below, because the value of the product is concatenated to your description, so if I step to double will give error, and now?

inserir a descrição da imagem aqui

  • 1

    I changed the code of my reply to remove the unit value of the string.

1 answer

1


First, you need to create a property in the form frmQuantidade so that the calling form can have access to the amount that was typed by the user.

The implementation of property Qtde can be done as follows in frmQuantidade:

public partial class frmQuantidade : Form
{
    public frmQuantidade()
    {
        InitializeComponent();
    }

    public double Qtde {get; set;}

    void btnGravar_Click(object sender, EventArgs e)
    {
        this.Qtde = Double.Parse(txtQtde.Text);
        this.Close();
    }
}

Then, in the method btnIr_Click of the calling form, you can do the following:

private void btnIr_Click(object sender, EventArgs e)
{
     frmQuantidade qntd = new frmQuantidade();
     qntd.ShowDialog();   

     if (lbProdutos.SelectedItem == null)
     {
          MessageBox.Show("Você não selecionou nenhum produto para adicionar");
     }
     else
     {
         //parser para retirar a descrição e o valor unitário de lbProdutos.SelectedItem
         int divisor = lbProdutos.SelectedItem.ToString().IndexOf("R$");
         string descricao = lbProdutos.SelectedItem.ToString().Substring(0,divisor).Trim();
         double ValorUnitario = double.Parse( lbProdutos.SelectedItem.ToString().Substring(divisor+2) );

         double valorTotal = valorUnitario * qntd.Qtde;

         //adicionar novo item com o valor total
         lbProdutosUsando.Items.Add(descricao + " R$ " + valorTotal .ToString());

         lbProdutos.Items.Remove(lbProdutos.SelectedItem);
     }
}

I still think I use the ListView will be the best solution for your case because you can put in the list on the right side the columns with the product name, unit value, quantity and total value.

  • Thanks @Fernando, this is what I needed, I will use it in the same way I did to go through the listbox and take all the values and play in a textbox, now that I saw how you separate the "R$", I thank you again.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.