none
somar valores numericos listbox c# RRS feed

  • Pergunta

  • Preciso somar apenas os valores numericos do listbox e ignorar o texto. Os valores numericos no caso são decimais, na minha listbox , cujo nome é "listBox1" está como texto por exemplo:

    Espetinho - R$15,00

    Espetinho - R$15,00

    Quero que ao clicar no botão "btn_valor" seja somado apenas os valores decimais do textbox e apresentado o resultado no texto do botão "btn_valor" mais ou menos dessa forma:

    btn_valor.Text = soma.ToString();

    ou seja soma todos os valores decimais da listbox e apresenta no texto do botão, ignorando desta forma o texto que esta la dentro

    tem como fazer isso?

    segunda-feira, 30 de janeiro de 2017 22:07

Respostas

  • Olá, 

    Tem como fazer sim, terá que usar expressão regular para pegar esses valores. Teste o código:

            private void btn_valor_Click(object sender, EventArgs e)
            {
                decimal valorTotal = 0;
                Regex rgx = new Regex(@"R\$(.*)");
    
                foreach (string linha in listBox1.Items)
                    valorTotal += decimal.Parse(rgx.Match(linha).Groups[1].Value);
    
                btn_valor.Text = valorTotal.ToString();
            }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Guilherme1974 terça-feira, 31 de janeiro de 2017 00:55
    segunda-feira, 30 de janeiro de 2017 23:47

Todas as Respostas

  • Olá, 

    Tem como fazer sim, terá que usar expressão regular para pegar esses valores. Teste o código:

            private void btn_valor_Click(object sender, EventArgs e)
            {
                decimal valorTotal = 0;
                Regex rgx = new Regex(@"R\$(.*)");
    
                foreach (string linha in listBox1.Items)
                    valorTotal += decimal.Parse(rgx.Match(linha).Groups[1].Value);
    
                btn_valor.Text = valorTotal.ToString();
            }

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Guilherme1974 terça-feira, 31 de janeiro de 2017 00:55
    segunda-feira, 30 de janeiro de 2017 23:47
  • Olá André, tentei utilizar este código mas obtive o seguinte erro:

    A cadeia de caracteres de entrada não estava em um formato correto

    creio q esteja ocorrendo pois dentro do listBox1 tenha um texto "espetinho -" e desta forma o erro ocorre por não estar ignorando este texto, obrigado pela ajuda desde ja

    terça-feira, 31 de janeiro de 2017 00:12
  • Guilherme,

    O Regex que eu fiz é exatamente para ele pegar apenas a parte numérica, porém você tem que postar aqui exatamente como fica escrito no listbox.

    O pattern da regex que fiz foi para isso:

    "Espetinho - R$15,00"


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 31 de janeiro de 2017 00:15
  • Ok, vou tentar explicar certinho para que não haja erros, meu form está da seguinte maneira: 

    http://prntscr.com/e2h3iz

    dpois de colocar todos as informações na listBox1 quero q ele some os valores numéricos da listBox1 e substitua o nome do botão pelo resultado da soma. "btn_valor" "listBox1"

    por enquanto ao clicar no botão valor ele esta mostrando tudo da coluna Preço no listBox1

    http://prntscr.com/e2h3sw

    • Editado Guilherme1974 terça-feira, 31 de janeiro de 2017 00:38
    terça-feira, 31 de janeiro de 2017 00:37
  • Olá André deu certo aqui, acho q fiz algo errado antes mas agr esse código funcionou certinho obrigado pela ajuda e desculpe o incomodo 
    terça-feira, 31 de janeiro de 2017 00:56