ListBox - Multiply values and move to another Listbox

0

I have 2 ListBoxes.

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

That said, will get the amount * value and show in the other ListBox.

CodethatloadsthelistBox:

privatevoidfrmOrdemServico_Load(objectsender,EventArgse){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 multiply only by doing this in this line:

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

But I can not do it when I pass the value through this forms.

Code to pass 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 the 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 that I made a person answered using the ListView, it was OK but I'm in the same situation as the ListBox. ListBox - how to show full product name and bring another column of values

UPDATE

I believe I have done what @Fernando said in his answer, but I will have this error as pictured below, because the value of the product is concatenated to its description, so if I step to double it will give error, and now?

    
asked by anonymous 27.10.2017 / 18:34

1 answer

1

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

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

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 btnIr_Click method 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 using ListView will be the best solution for your case because you can put the columns with the product name, unit value, quantity, and total value in the list on the right.

    
27.10.2017 / 20:00