none
C# Interação PictureBox com ComboBox RRS feed

  • Pergunta

  • Olá, estou criando um software em C# e estou com os seguintes problemas:

    1. O programa gera 'N' ComboBox com uma lista de items padrão para eles, mas quando testo para alterar a seleção de um item em um ComboBox, todos os outros alteram para o mesmo. Cada um deveria ser independente, além disso, para cada ComboBox criado também é gerado um PictureBox que deverá interagir com ele.

    2. Preciso alterar o background image de cada PictureBox com base na escolha efetuada pelo usuário no ComboBox.

    Trechos exemplos do Code:

    Tipo[] lista = new Tipo[]
                {
                    new Tipo("R", "Red"),
                    new Tipo("G", "Green"),
                    new Tipo("Y", "Yellow")
                };

    for (int i = 1; i <= NC; i++)
                {

                    :

                    :

                    :

                    ComboBox cbC = new ComboBox();
                    cbC.Name = "cbC" + i.ToString() + "SPT" + tbidx.ToString();
                    cbC.Size = new Size(56, 20);
                    cbC.Location = new Point(5, (pbC2H / (NC * 2)) - 11);
                    cbC.DataSource = lista;
                    cbC.DisplayMember = "Solo";
                    pbC2.Controls.Add(cbC);

                    PictureBox pbS = new PictureBox();
                    pbS.Name = cbC.SelectedValue.ToString();
                    pbS.Size = new Size(20, 20);
                    pbS.Location = new Point(62, (pbC2H / (NC * 2)) - 11);
                    //pbS.BackColor = Color.Crimson; //Substituir por backgroundimage
                    pbC2.Controls.Add(pbS);

                    :

                    :

                    :

                }

    Alguma sugestão?

    • Tipo Alterado Jonh Kalak segunda-feira, 29 de janeiro de 2018 17:35
    sábado, 27 de janeiro de 2018 19:16

Respostas

  • Jonh Kalak,

    Edite sua postagem, alterando o tipo para Pergunta. Colocando o tipo incorreto fará com que sua postagem receba menos atenção, já que Discussão é algo baseado em opiniões e nem todos tem interesse. Além disso não condiz com sua necessidade.

    No seu loop de criação dos ComboBoxes, ao invés de associar o SelectionChangeCommitted, use o SelectedIndexChanged. Daí você pode buscar o PictureBox como no exemplo abaixo:

    // no loop
    
    for (...)
    {
        cbC.SelectedIndexChanged += new System.EventHandler(cbC_SelectionChangeCommitted); // Entre parênteses é o nome do método que irá tratar o evento
    }

    using System.Linq; //Não esqueça do using
    
    private void cbC_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        var cbC = (ComboBox)sender;
        // capturando a referência para o PictureBox dentro do mesmo Panel que o ComboBox
        PictureBox pb = cbC.Parent.Controls.OfType<PictureBox>().First();
    
        // Altere as propriedades do PictureBox
        // ...
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    segunda-feira, 29 de janeiro de 2018 16:58

Todas as Respostas

  • Olá Jonh Kalak

    Tudo bem?!

    Você pode criar um pequeno exemplo e disponibilizar para tentar fazer uma reprodução?

    Assim ficaria muito mais rápido para entender melhor e resolver.

     Por exemplo quem é pbC2 é uma panel/form entende? Se tiver como disponibilizar um exemplo poderia lhe auxiliar com isso.

    Hugs!


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

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter


    domingo, 28 de janeiro de 2018 15:36
  • Tudo e com você?

    Extamente, pbc2 é um panel, tanto o ComboBox quanto o PictureBox são criados dinamicamentes dentro dele.

    Na imagem acima (OPS, não me deixaram colocar a imagem, então veja por aqui: imgur.com/lwtD2A2), Cor1 deveria mudar para ImagemX e Cor2 para ImagemY, mas ambos continuam com a mesma cor pois coloquei como BackColor padrão do PictureBox.

    Até!

    segunda-feira, 29 de janeiro de 2018 13:01
  • Como está o código do evento SelectedIndexChanged para cada ComboBox? 

    PS: Edite sua dúvida e altere o tipo para Pergunta ao invés de Discussão.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    segunda-feira, 29 de janeiro de 2018 15:54
  • Não criei esse evento, o evento que tenho é este.

                

    private void cbC_SelectionChangeCommitted(object sender, EventArgs e)
            {
                var cbC = (ComboBox)sender;

                cbC.DisplayMember = "Cor";            
            }

    Tentei usar via ele, mas como o PictureBox não "existe" nele, não deu certo.

    Verei se consigo via esse evento que mencionaste, mas puder adiantar algo sobre isso, agradeceria!


    segunda-feira, 29 de janeiro de 2018 16:13
  • Jonh Kalak,

    Edite sua postagem, alterando o tipo para Pergunta. Colocando o tipo incorreto fará com que sua postagem receba menos atenção, já que Discussão é algo baseado em opiniões e nem todos tem interesse. Além disso não condiz com sua necessidade.

    No seu loop de criação dos ComboBoxes, ao invés de associar o SelectionChangeCommitted, use o SelectedIndexChanged. Daí você pode buscar o PictureBox como no exemplo abaixo:

    // no loop
    
    for (...)
    {
        cbC.SelectedIndexChanged += new System.EventHandler(cbC_SelectionChangeCommitted); // Entre parênteses é o nome do método que irá tratar o evento
    }

    using System.Linq; //Não esqueça do using
    
    private void cbC_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        var cbC = (ComboBox)sender;
        // capturando a referência para o PictureBox dentro do mesmo Panel que o ComboBox
        PictureBox pb = cbC.Parent.Controls.OfType<PictureBox>().First();
    
        // Altere as propriedades do PictureBox
        // ...
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    segunda-feira, 29 de janeiro de 2018 16:58
  • Holy man! Me segurando para não gritar de alegria aqui no trabalho, kkkk

    Obrigado pela ajuda.

    PS: Engraçado que sempre que posto em pergunta alguém pede para mudar para discussão e vice-versa. De agora em diante postarei sempre em perguntas.

    segunda-feira, 29 de janeiro de 2018 17:34
  • De modo geral seria assim (minha visão):

    Discussão é quando você precisa de opiniões ou quer saber a visão de outras pessoas. Não te encaminha para uma "resposta correta".

    Pergunta é quando você tem uma dúvida e precisa de uma solução.

    PS: Lembre-se de marcar a resposta como aceita. ;-)


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    segunda-feira, 29 de janeiro de 2018 17:59