Usuário com melhor resposta
Como mudar a cor de fundo de um item selecionado em um Checklistbox?

Pergunta
-
Respostas
-
Ola amigo boa tarde,
Crie a uma classe que herde de CheckedListBox (abaixo exemplo), em seguida abra o designer.cs do seu form e altere a Instância do objeto do CheckedListBox de System.Windows.Forms.CheckedListBox para sua classe.
class MeuCheckedListBox : CheckedListBox { protected override void OnDrawItem(DrawItemEventArgs e) { DrawItemEventArgs e2 = new DrawItemEventArgs ( e.Graphics, e.Font, new Rectangle(e.Bounds.Location, e.Bounds.Size), e.Index, e.State, e.ForeColor, this.CheckedIndices.Contains(e.Index) ? Color.Red : SystemColors.Window ); base.OnDrawItem(e2); } }
Acima perceba que a cor do selecionado será vermelha (Color.Red).
No Designer.cs
Altere a linha:
this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();
para:
this.checkedListBox1 = new MeuCheckedListBox();
Espero ter ajudado!
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 28 de fevereiro de 2018 17:46
-
Entendi, na verdade vc queria alterar a cor do "Highlight" do item selecionado, podemos tentar assim:
- Altere a classe MeuCheckedListBox:
class MeuCheckedListBox : CheckedListBox { public int CurrentIndex { get; set; } protected override void OnDrawItem(DrawItemEventArgs e) { Color foreColor = Color.Black; Color backColor = Color.Red; DrawItemEventArgs e2 = new DrawItemEventArgs(e.Graphics, e.Font, e.Bounds, e.Index, DrawItemState.None, foreColor, CurrentIndex == e.Index ? Color.Red : SystemColors.Window); base.OnDrawItem(e2); } }
Depois crie dois eventos ao CheckedListBox:
private void checkedListBox1_KeyDown(object sender, KeyEventArgs e) { var index = checkedListBox1.SelectedIndex; if (index < 0) return; checkedListBox1.CurrentIndex = e.KeyCode == Keys.Down || e.KeyCode == Keys.Right ? (index + 1) : e.KeyCode == Keys.Up || e.KeyCode == Keys.Left ? (index - 1) : index; } private void checkedListBox1_MouseMove(object sender, MouseEventArgs e) { var index = checkedListBox1.IndexFromPoint(e.X, e.Y); if (index < 0) return; checkedListBox1.CurrentIndex = index; }
Veja se o comportamento está como o esperado, um abraço!
- Editado Edson Loris quarta-feira, 28 de fevereiro de 2018 18:18
- Marcado como Resposta Denis Valjean quinta-feira, 1 de março de 2018 09:46
Todas as Respostas
-
-
/*O for percorrerá cada item do seu CheckedListBox, e o If verificará um por um, se algum está selecionado. */ /*O método CheckListBox.Items.Count retorna um valor igual ao número de items, e o "-1" como você ja deve saber tá ali porque os índices começam do zero. for( int i = 0; i <= seuChecklistBox.Items.Count - 1; i++ ) { if( seuChecklistBox.Items[ i ].Selected == true) { seuChecklistbox.Items[i].Color = Cor_que_voce_quer; } }
Resumindo você precisa de um loop como um for ou foreach para encontrar items
selecionados, daí quando encontrá-los basta mudar a propriedade color, ou backColor deles.
Espero que ajude se der errado chama aqui de novo.
Ajudando marcar como útil, caso tenha esclarecido sua dúvida marcar como resposta.
Obrigado.
- Editado Gabriel_Vinicius terça-feira, 27 de fevereiro de 2018 14:07
-
/*O for percorrerá cada item do seu CheckedListBox, e o If verificará um por um, se algum está selecionado. */ for( int i = 0; i <= seuChecklistBox.Items.Count - 1; i++ ) { if( seuChecklistBox.Items[ i ].Selected == true) { seuChecklistbox.Color = Cor_que_voce_quer; } }
Resumindo você precisa de um loop como um for ou foreach para encontrar items
selecionados, daí quando encontrá-los basta mudar a propriedades color, ou backColor deles.
Espero que ajude se der errado chama aqui de novo.
Ajudar marcar como útil, caso tenha esclarecido sua dúvida marcar como resposta.
-
Ola amigo boa tarde,
Crie a uma classe que herde de CheckedListBox (abaixo exemplo), em seguida abra o designer.cs do seu form e altere a Instância do objeto do CheckedListBox de System.Windows.Forms.CheckedListBox para sua classe.
class MeuCheckedListBox : CheckedListBox { protected override void OnDrawItem(DrawItemEventArgs e) { DrawItemEventArgs e2 = new DrawItemEventArgs ( e.Graphics, e.Font, new Rectangle(e.Bounds.Location, e.Bounds.Size), e.Index, e.State, e.ForeColor, this.CheckedIndices.Contains(e.Index) ? Color.Red : SystemColors.Window ); base.OnDrawItem(e2); } }
Acima perceba que a cor do selecionado será vermelha (Color.Red).
No Designer.cs
Altere a linha:
this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();
para:
this.checkedListBox1 = new MeuCheckedListBox();
Espero ter ajudado!
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 28 de fevereiro de 2018 17:46
-
Ola amigo boa tarde,
Crie a uma classe que herde de CheckedListBox (abaixo exemplo), em seguida abra o designer.cs do seu form e altere a Instância do objeto do CheckedListBox de System.Windows.Forms.CheckedListBox para sua classe.
class MeuCheckedListBox : CheckedListBox { protected override void OnDrawItem(DrawItemEventArgs e) { DrawItemEventArgs e2 = new DrawItemEventArgs ( e.Graphics, e.Font, new Rectangle(e.Bounds.Location, e.Bounds.Size), e.Index, e.State, e.ForeColor, this.CheckedIndices.Contains(e.Index) ? Color.Red : SystemColors.Window ); base.OnDrawItem(e2); } }
Acima perceba que a cor do selecionado será vermelha (Color.Red).
No Designer.cs
Altere a linha:
this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();
para:
this.checkedListBox1 = new MeuCheckedListBox();
Espero ter ajudado!
this.CheckedIndices.Contains
-
Entendi, na verdade vc queria alterar a cor do "Highlight" do item selecionado, podemos tentar assim:
- Altere a classe MeuCheckedListBox:
class MeuCheckedListBox : CheckedListBox { public int CurrentIndex { get; set; } protected override void OnDrawItem(DrawItemEventArgs e) { Color foreColor = Color.Black; Color backColor = Color.Red; DrawItemEventArgs e2 = new DrawItemEventArgs(e.Graphics, e.Font, e.Bounds, e.Index, DrawItemState.None, foreColor, CurrentIndex == e.Index ? Color.Red : SystemColors.Window); base.OnDrawItem(e2); } }
Depois crie dois eventos ao CheckedListBox:
private void checkedListBox1_KeyDown(object sender, KeyEventArgs e) { var index = checkedListBox1.SelectedIndex; if (index < 0) return; checkedListBox1.CurrentIndex = e.KeyCode == Keys.Down || e.KeyCode == Keys.Right ? (index + 1) : e.KeyCode == Keys.Up || e.KeyCode == Keys.Left ? (index - 1) : index; } private void checkedListBox1_MouseMove(object sender, MouseEventArgs e) { var index = checkedListBox1.IndexFromPoint(e.X, e.Y); if (index < 0) return; checkedListBox1.CurrentIndex = index; }
Veja se o comportamento está como o esperado, um abraço!
- Editado Edson Loris quarta-feira, 28 de fevereiro de 2018 18:18
- Marcado como Resposta Denis Valjean quinta-feira, 1 de março de 2018 09:46
-
Entendi, na verdade vc queria alterar a cor do "Highlight" do item selecionado, podemos tentar assim:
- Altere a classe MeuCheckedListBox:
class MeuCheckedListBox : CheckedListBox { public int CurrentIndex { get; set; } protected override void OnDrawItem(DrawItemEventArgs e) { Color foreColor = Color.Black; Color backColor = Color.Red; DrawItemEventArgs e2 = new DrawItemEventArgs(e.Graphics, e.Font, e.Bounds, e.Index, DrawItemState.None, foreColor, CurrentIndex == e.Index ? Color.Red : SystemColors.Window); base.OnDrawItem(e2); } }
Depois crie dois eventos ao CheckedListBox:
private void checkedListBox1_KeyDown(object sender, KeyEventArgs e) { var index = checkedListBox1.SelectedIndex; if (index < 0) return; checkedListBox1.CurrentIndex = e.KeyCode == Keys.Down || e.KeyCode == Keys.Right ? (index + 1) : e.KeyCode == Keys.Up || e.KeyCode == Keys.Left ? (index - 1) : index; } private void checkedListBox1_MouseMove(object sender, MouseEventArgs e) { var index = checkedListBox1.IndexFromPoint(e.X, e.Y); if (index < 0) return; checkedListBox1.CurrentIndex = index; }
Veja se o comportamento está como o esperado, um abraço!