none
Array em C# RRS feed

  • Pergunta

  • Olá. Estou tentando criar um vetor de 100 posições em C#. Preciso criar para as radiobuttons. Todas elas precisam ter 4 números para depois serem adicionadas numa listbox. Tipo, eu clico no radiobutton 3 , depois clica em 'enviar' e os numeros sao adicionados no listbox. Tem como ?
    domingo, 29 de março de 2015 15:13

Respostas

  • Entendi.

    Tem algumas coisas diferentes que da pra tentar fazer com esse caso que você apresentou. Eu tentaria resolver essas alterações em elementos de html na verdade com JavaScript, para evitar fazer muitas requisições ao servidor cada vez que alguém altera uma seleção para acrescentar números. Eu também consideraria utilizar checkbox ao invés de radiobutton para a seleção do time, a menos que a sua regra de negocio seja que o Usuário deve se limitar a uma escolha de time somente para gerar os números da aposta.

    Em todo o caso, você pode evitar instanciar todos esses Arrays criando uma classe que servirá de agregador para os seus times. Por exemplo, uma classe Times com uma propriedade do tipo Dictionary<string, ListItem[]> chamada DicionarioTimes, dessa forma você consegue em um único objeto acessar os seus conjuntos de números pela chave, que seria neste caso o nome do time ou a sigla como você colocou.

    public class Times
    {
    	public Dictionary<string, ListItem[]>
    	{
    		get
    		{
    			return new Dictionary<string, ListItem[]>()
    			{
    				{"CAM", new ListItem[4]{new ListItem("1"), new ListItem("2"), new ListItem("3"), new ListItem("4")}}
    				{"APR", new ListItem[4]{new ListItem("5"), new ListItem("6"), new ListItem("7"), new ListItem("8")}}
    				...
    			};
    		}
    	}
    }

    Para os RadioButtons, no lugar de vários controles separados, você pode utilizar um RadioButtonList, e ter os seus RadioButtons como itens desse elemento. Depois, na hora de confirmar a seleção, no evento de click do seu botão "Enviar", você pode simplesmente selecionar o SelectedItem da sua list e utilizar a propriedade Value dele para indicar a chave ao seu dicionario.

    O ListBox possui um método chamado AddRange, que te permite acrescentar uma lista de itens, mas eles tem que ser do tipo ListItem. Você pode tentar alguma forma de boxing e unboxing, ou simplesmente utilizar os itens no seu dicionario como ListItems mesmo. Dessa forma você vai conseguir o mesmo resultado do código apresentado, mas com 1 linha de código e uma forma um pouco mais fácil de entender o fluxo. 

    listBox2.Items.AddRange(times.DicionarioDeTimes[radioButtonList.SelectedItem.Value]);

     Att,

    quarta-feira, 1 de abril de 2015 14:29
  • Bom dia Elooá,

    Deixa eu ver se entendi. Você quer capturar os 4 números que existem nas radiobuttons que forem selecionadas e jogar dentro de um vetor de 100 posições, depois você quer utilizar esse vetor como datasource em um listbox, é isso?

    Nos de mais detalhes da dúvida, e se possível poste seu código para ajudarmos.

    Obrigado,

    Abraço!


    Eduardo Romero

    Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.

    • Marcado como Resposta Elooá sábado, 11 de abril de 2015 04:15
    terça-feira, 31 de março de 2015 13:06
    Moderador
  • Elooá,

    Tudo bom? Qual o requisito do código que você está escrevendo? Qual a definição do que deveria acontecer? Tendo uma ideia do objetivo do algoritmo, de repente podemos chegar em alguma solução mais interessante para o seu caso.

    Att,

    • Marcado como Resposta Elooá sábado, 11 de abril de 2015 04:15
    terça-feira, 31 de março de 2015 19:50

Todas as Respostas

  • Bom dia Elooá,

    Deixa eu ver se entendi. Você quer capturar os 4 números que existem nas radiobuttons que forem selecionadas e jogar dentro de um vetor de 100 posições, depois você quer utilizar esse vetor como datasource em um listbox, é isso?

    Nos de mais detalhes da dúvida, e se possível poste seu código para ajudarmos.

    Obrigado,

    Abraço!


    Eduardo Romero

    Esse conteudo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais facil para os outros visitantes encontrarem a resolucao mais tarde.

    • Marcado como Resposta Elooá sábado, 11 de abril de 2015 04:15
    terça-feira, 31 de março de 2015 13:06
    Moderador
  • oi. o meu codigo em if esta assim:

    // Enviar. Botão dos Times 
                 int[] CAM = new int[] { 1, 2, 3, 4 };
                 int[] APR = new int[] { 5, 6, 7, 8 };
                 int[] BHA = new int[] { 9, 10, 11, 12 };
                 int[] BOT = new int[] { 13, 14, 15, 16 };
                 int[] CEA = new int[] { 17, 18, 19, 20 };
                 int[] COR = new int[] { 21, 22, 23, 24 };
                 int[] CUR = new int[] { 25, 26, 27, 28 };
                 int[] CRU = new int[] { 29, 30, 31, 32 };
                 int[] FLA = new int[] { 33, 34, 35, 36 };
                 int[] FLU = new int[] { 37, 38, 39, 40 };
                 int[] FOR = new int[] { 41, 42, 43, 44 };
                 int[] GOI = new int[] { 45, 46, 47, 48 };
                 int[] GRE = new int[] { 49, 50, 51, 52 };
                 int[] GUA = new int[] { 53, 54, 55, 56 };
                 int[] INT = new int[] { 57, 58, 59, 60 };
                 int[] NAU = new int[] { 61, 62, 63, 64 };
                 int[] PAL = new int[] { 65, 66, 67, 68 };
                 int[] PRC = new int[] { 69, 70, 71, 72 };
                 int[] POP = new int[] { 73, 74, 75, 76 };
                 int[] STA = new int[] { 77, 78, 79, 80 };
                 int[] SAN = new int[] { 81, 82, 83, 84 };
                 int[] SAO = new int[] { 85, 86, 87, 88 };
                 int[] SPO = new int[] { 89, 90, 91, 92 };
                 int[] VAS = new int[] { 93, 94, 95, 96 };
                 int[] VIC = new int[] { 97, 98, 99, 00 };

                for (int i = 0; i < 4; i++)
                {
                    if (radioButton1.Checked)
                    {
                        listBox2.Items.Add(CAM[i]);
                    }
                    else
                        if (radioButton2.Checked)
                        {
                            listBox2.Items.Add(APR[i]);
                        }
                    if (radioButton3.Checked)
                    {
                        listBox2.Items.Add(BHA[i]);
                    }
                    else
                        if (radioButton4.Checked)
                    {
                        listBox2.Items.Add(BOT[i]);
                    }
                    else
                        if (radioButton5.Checked)
                    {
                        listBox2.Items.Add(CEA[i]);
                    }
                    else
                        if (radioButton6.Checked)
                    {
                        listBox2.Items.Add(COR[i]);
                    }
                    else
                        if (radioButton7.Checked)
                    {
                        listBox2.Items.Add(CUR[i]);
                    }
                    else
                        if (radioButton8.Checked)
                    {
                        listBox2.Items.Add(CRU[i]);
                    }
                    else
                        if (radioButton9.Checked)
                    {
                        listBox2.Items.Add(FLA[i]);
                    }
                    else
                        if (radioButton10.Checked)
                    {
                        listBox2.Items.Add(FLU[i]);
                    }
                    else
                        if (radioButton11.Checked)
                    {
                        listBox2.Items.Add(FOR[i]);
                    }
                    else
                         if (radioButton12.Checked)
                    {
                        listBox2.Items.Add(GOI[i]);
                    }
                    else
                        if (radioButton13.Checked)
                    {
                        listBox2.Items.Add(GRE[i]);
                    }
                    else
                        if (radioButton14.Checked)
                    {
                        listBox2.Items.Add(GUA[i]);
                    }
                    else
                        if (radioButton15.Checked)
                    {
                        listBox2.Items.Add(INT[i]);
                    }
                    else
                         if (radioButton16.Checked)
                    {
                        listBox2.Items.Add(NAU[i]);
                    }
                    else
                        if (radioButton17.Checked)
                    {
                        listBox2.Items.Add(PAL[i]);
                    }
                    else
                        if (radioButton18.Checked)
                    {
                        listBox2.Items.Add(PRC[i]);
                    }
                    else
                        if (radioButton19.Checked)
                    {
                        listBox2.Items.Add(POP[i]);
                    }
                    else
                        if (radioButton20.Checked)
                    {
                        listBox2.Items.Add(STA[i]);
                    }
                    else
                        if (radioButton21.Checked)
                    {
                        listBox2.Items.Add(SAN[i]);
                    }
                    else
                        if (radioButton22.Checked)
                    {
                        listBox2.Items.Add(SAO[i]);
                    }
                    else
                        if (radioButton23.Checked)
                    {
                        listBox2.Items.Add(SPO[i]);
                    }
                    else
                        if (radioButton24.Checked)
                    {
                        listBox2.Items.Add(VAS[i]);
                    }
                    else
                        if (radioButton25.Checked)
                    {
                        listBox2.Items.Add(VIC[i]);
                    }
                }                     
            }                 

    queria que ele ficasse desse jeito, so que com case, para ficar menos comprido.

    obrigado.

    terça-feira, 31 de março de 2015 19:29
  • Elooá,

    Tudo bom? Qual o requisito do código que você está escrevendo? Qual a definição do que deveria acontecer? Tendo uma ideia do objetivo do algoritmo, de repente podemos chegar em alguma solução mais interessante para o seu caso.

    Att,

    • Marcado como Resposta Elooá sábado, 11 de abril de 2015 04:15
    terça-feira, 31 de março de 2015 19:50
  • é um programa de apostas com time. quando seleciono, por exemplo, 'atletico mg', ele adiciona 4 numeros, para eu apostar, no caso, os numeros '1,2,3,4' e assim, igualmente, para todos os times
    quarta-feira, 1 de abril de 2015 00:40
  • Entendi.

    Tem algumas coisas diferentes que da pra tentar fazer com esse caso que você apresentou. Eu tentaria resolver essas alterações em elementos de html na verdade com JavaScript, para evitar fazer muitas requisições ao servidor cada vez que alguém altera uma seleção para acrescentar números. Eu também consideraria utilizar checkbox ao invés de radiobutton para a seleção do time, a menos que a sua regra de negocio seja que o Usuário deve se limitar a uma escolha de time somente para gerar os números da aposta.

    Em todo o caso, você pode evitar instanciar todos esses Arrays criando uma classe que servirá de agregador para os seus times. Por exemplo, uma classe Times com uma propriedade do tipo Dictionary<string, ListItem[]> chamada DicionarioTimes, dessa forma você consegue em um único objeto acessar os seus conjuntos de números pela chave, que seria neste caso o nome do time ou a sigla como você colocou.

    public class Times
    {
    	public Dictionary<string, ListItem[]>
    	{
    		get
    		{
    			return new Dictionary<string, ListItem[]>()
    			{
    				{"CAM", new ListItem[4]{new ListItem("1"), new ListItem("2"), new ListItem("3"), new ListItem("4")}}
    				{"APR", new ListItem[4]{new ListItem("5"), new ListItem("6"), new ListItem("7"), new ListItem("8")}}
    				...
    			};
    		}
    	}
    }

    Para os RadioButtons, no lugar de vários controles separados, você pode utilizar um RadioButtonList, e ter os seus RadioButtons como itens desse elemento. Depois, na hora de confirmar a seleção, no evento de click do seu botão "Enviar", você pode simplesmente selecionar o SelectedItem da sua list e utilizar a propriedade Value dele para indicar a chave ao seu dicionario.

    O ListBox possui um método chamado AddRange, que te permite acrescentar uma lista de itens, mas eles tem que ser do tipo ListItem. Você pode tentar alguma forma de boxing e unboxing, ou simplesmente utilizar os itens no seu dicionario como ListItems mesmo. Dessa forma você vai conseguir o mesmo resultado do código apresentado, mas com 1 linha de código e uma forma um pouco mais fácil de entender o fluxo. 

    listBox2.Items.AddRange(times.DicionarioDeTimes[radioButtonList.SelectedItem.Value]);

     Att,

    quarta-feira, 1 de abril de 2015 14:29