Usuário com melhor resposta
C# Interação PictureBox com ComboBox

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
Respostas
-
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.
- Editado Juliano Nunes Silva Oliveira segunda-feira, 29 de janeiro de 2018 17:01
- Sugerido como Resposta Juliano Nunes Silva Oliveira segunda-feira, 29 de janeiro de 2018 18:38
- Marcado como Resposta Jonh Kalak segunda-feira, 29 de janeiro de 2018 18:54
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- Editado Rafael Almeida - MVPMVP domingo, 28 de janeiro de 2018 15:53 nome
-
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é!
-
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.
- Editado Juliano Nunes Silva Oliveira segunda-feira, 29 de janeiro de 2018 15:58
-
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!
-
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.
- Editado Juliano Nunes Silva Oliveira segunda-feira, 29 de janeiro de 2018 17:01
- Sugerido como Resposta Juliano Nunes Silva Oliveira segunda-feira, 29 de janeiro de 2018 18:38
- Marcado como Resposta Jonh Kalak segunda-feira, 29 de janeiro de 2018 18:54
-
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.
-
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.