none
Como capturar valores iguais de uma listbox em uma label? RRS feed

  • Pergunta

  • Estou tentando capturar o maior valor de uma listbox que contém uma pontuação, consigo pegar a maior pontuação,

    mas preciso capturar mais de uma se existir. Por exemplo, se na listbox existirem as seguintes pontuações:

    21, 21, 20, 19, 18, 21, preciso capturar as três maiores notas que no caso são o 21, preciso que elas sejam

    concatenadas em uma label através, e preciso que o nome de quem obteve as pontuações também venha junto.

    Logo abaixo encontra-se meu código, no momento só capturo 1 maior nota.

    private void MaiorNota() { int aux = 0; int maior; string vencedor = ""; for (int i = 0; i < lstPontuação.Items.Count; i++) { if (aux <= Convert.ToInt16(lstPontuação.Items[i])) { if (aux < Convert.ToInt16(lstPontuação.Items[i])) { if (Convert.ToInt16(lstPontuação.Items.Count) == 1) { maior = Convert.ToInt16(lstPontuação.Items[i].ToString()); //vencedor = "Com " + Convert.ToString(maior) + ", o vencedor foi: " + Convert.ToString(lstJogadores.Items[i]); vencedor = Convert.ToString("O vencedor foi: " + lstJogadores.Items[i]) + ", com " + Convert.ToString(maior) + " pontos"; lblVencedor.Text = Convert.ToString(vencedor); } else if (Convert.ToInt16(lstPontuação.Items.Count) > 1) { } } } } }



    segunda-feira, 18 de junho de 2012 17:13

Respostas

  • Olá Marllo,
    fiz o código aqui do que entendi que você quer fazer:

    No caso, você tem 2 ListBox, 1 com as pontuações e outro com os Nomes, acredito que o índice da pontuação é o mesmo índice do nome nos ListBox's.
    Fiz o algoritmo acreditando que o numero de pontuações é o mesmo numero de nomes, ou seja, os dois ListBox tem o mesmo numero de itens.
    E não coloquei proteções, por exemplo, se não houver items...

    private void button1_Click(object sender, EventArgs e) {
    //Cria variável 'maior' para achar o maior valor do listbox / Cria variável 'texto' para armazenar o texto. int maior = Convert.ToInt32(listBox1.Items[0]); string texto = "";
    //for para percorrer todos os items do listbox for (int i = 0; i < listBox1.Items.Count; i++) {
    //se o numero encontrado no indice 'i' for igual o valor que esta na variavel 'maior' entra no if if (Convert.ToInt32(listBox1.Items[i]) == maior) {

    //concatena a pontuação e o nome do indice dos listbox's texto += listBox1.Items[i].ToString() + " - " + listBox2.Items[i].ToString() + "\n"; }

    //se o valor do indice 'i' do listbox for maior que o valor da variavel 'maior' entra no if if (Convert.ToInt32(listBox1.Items[i]) > maior) {
    //adiciona um novo valor para a variavel 'maior' / substitui o valor da variavel 'texto' pela nova pontuação e nome
    maior = Convert.ToInt32(listBox1.Items[i]);
    texto = listBox1.Items[i].ToString() + " - " + listBox2.Items[i].ToString() + "\n";

    } } //exibe o texto MessageBox.Show(texto); }

    Marque como resposta se for o caso, obrigado.


    Flavio Silva (Sko.Lex) - http://www.youtube.com/user/MrSkoLex


    segunda-feira, 18 de junho de 2012 21:42

Todas as Respostas

  • Como você preenche a ListBox? É através de uma List ou um DataTable? Dependendo como for dá pra fazer por Linq ou Lambda Expressions.

    Thiago Coelho
    thiagocoelho.net
    @thiagokoelho

    segunda-feira, 18 de junho de 2012 17:29
  • Na verdade, são duas listbox, uma com o nome e outra com a pontuação, a que recebe o nome recebe de um textbox e a que recebe a pontuação recebe a soma de uma outra list, preciso de todos os vencedores em caso de empate. Segue meu código completo...

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void btnAdcionarValor_Click(object sender, EventArgs e)
            {
                int pontos;
                
                pontos = Convert.ToInt16(txtPontos.Text);
                lstPontos.Items.Add(pontos);
                txtNomeJogador.Enabled = false;
                txtPontos.Clear();
                txtPontos.Focus();
            }
    
            private void btnRemoverValor_Click(object sender, EventArgs e)
            {
                lstPontos.Items.RemoveAt(lstPontos.SelectedIndex);
            }
    
            private void btnCalcularValor_Click(object sender, EventArgs e)
            {
                int soma = 0;
                foreach (object o in lstPontos.Items)
                {
                    soma += Convert.ToInt16(o.ToString());
                }
                
                soma = soma;
                lstPontuação.Items.Add(soma);
                string jogador;
                jogador = Convert.ToString(txtNomeJogador.Text);
                lstJogadores.Items.Add(jogador);
                lstPontos.Items.Clear();
                txtNomeJogador.Enabled = true;
                txtNomeJogador.Clear();
                txtNomeJogador.Focus();
            }
    
            private void QuantidadeDePontos()
            {
                lblQuantidadePontos.Text = lstPontuação.Items.Count.ToString();
            }
    
            private void btnVencedor_Click(object sender, EventArgs e)
            {
                QuantidadeDePontos();
                MaiorNota();
            }
    
            private void MaiorNota()
            {
                int aux = 0;
                int maior;
                string vencedor = "";
    
                for (int i = 0; i < lstPontuação.Items.Count; i++)
                {
                    if (aux <= Convert.ToInt16(lstPontuação.Items[i]))
                    {
                        if (aux < Convert.ToInt16(lstPontuação.Items[i]))
                        {
                            if (Convert.ToInt16(lstPontuação.Items.Count) == 1)
                            {
                                maior = Convert.ToInt16(lstPontuação.Items[i].ToString());
                                //vencedor = "Com " + Convert.ToString(maior) + ", o vencedor foi: " + Convert.ToString(lstJogadores.Items[i]);
                                vencedor = Convert.ToString("O vencedor foi: " + lstJogadores.Items[i]) + ", com " + Convert.ToString(maior) + " pontos";
                                lblVencedor.Text = Convert.ToString(vencedor);
                            }
                            else if (Convert.ToInt16(lstPontuação.Items.Count) > 1)
                            {
    
                            }
                        }
                    }
                    
                }
            }
         }
    }

    segunda-feira, 18 de junho de 2012 17:46
  • Olá Marllo,
    fiz o código aqui do que entendi que você quer fazer:

    No caso, você tem 2 ListBox, 1 com as pontuações e outro com os Nomes, acredito que o índice da pontuação é o mesmo índice do nome nos ListBox's.
    Fiz o algoritmo acreditando que o numero de pontuações é o mesmo numero de nomes, ou seja, os dois ListBox tem o mesmo numero de itens.
    E não coloquei proteções, por exemplo, se não houver items...

    private void button1_Click(object sender, EventArgs e) {
    //Cria variável 'maior' para achar o maior valor do listbox / Cria variável 'texto' para armazenar o texto. int maior = Convert.ToInt32(listBox1.Items[0]); string texto = "";
    //for para percorrer todos os items do listbox for (int i = 0; i < listBox1.Items.Count; i++) {
    //se o numero encontrado no indice 'i' for igual o valor que esta na variavel 'maior' entra no if if (Convert.ToInt32(listBox1.Items[i]) == maior) {

    //concatena a pontuação e o nome do indice dos listbox's texto += listBox1.Items[i].ToString() + " - " + listBox2.Items[i].ToString() + "\n"; }

    //se o valor do indice 'i' do listbox for maior que o valor da variavel 'maior' entra no if if (Convert.ToInt32(listBox1.Items[i]) > maior) {
    //adiciona um novo valor para a variavel 'maior' / substitui o valor da variavel 'texto' pela nova pontuação e nome
    maior = Convert.ToInt32(listBox1.Items[i]);
    texto = listBox1.Items[i].ToString() + " - " + listBox2.Items[i].ToString() + "\n";

    } } //exibe o texto MessageBox.Show(texto); }

    Marque como resposta se for o caso, obrigado.


    Flavio Silva (Sko.Lex) - http://www.youtube.com/user/MrSkoLex


    segunda-feira, 18 de junho de 2012 21:42