Comment changer la couleur de fond de la sélection ListBox?
Il semble qu'il utilise par défaut la couleur de paramètres de Windows qui est en bleu par défaut.
Disons que je veux changer en rouge en permanence. Je suis l'aide de Winforms.
privatevoid listBox1_DrawItem(object sender,DrawItemEventArgs e){if(e.Index<0)return;//if the item state is selected them change the back color if((e.State&DrawItemState.Selected)==DrawItemState.Selected)
e =newDrawItemEventArgs(e.Graphics,
e.Font,
e.Bounds,
e.Index,
e.State^DrawItemState.Selected,
e.ForeColor,Color.Yellow);//Choose the color//Draw the background of the ListBox control for each item.
e.DrawBackground();//Draw the current item text
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),e.Font,Brushes.Black, e.Bounds,StringFormat.GenericDefault);//If the ListBox has focus, draw a focus rectangle around the selected item.
e.DrawFocusRectangle();}
6
J'espère que cela va aider quelqu'un dans le futur, comme le code ci-dessus m'a aidé, mais pas à 100%
J'ai toujours eu les problèmes suivants:
- lorsque j'ai sélectionné un autre indice, vient d'être choisi comme indice permettrait également de mettre en évidence en rouge.
- quand j'ai changé la taille de la police de la zone de liste, la zone en surbrillance serait à petit.
Ci-dessous résout ce problème
changer le DrawMode à ownerdrawvariable
créer un MeasurItem et DrawItem cas de la zone de liste
void listBox1_SelectedIndexChanged(object sender,System.EventArgs e){this.listBox1.Invalidate();}void listBox1_DrawItem(object sender,System.Windows.Forms.DrawItemEventArgs e){int index = e.Index;Graphics g = e.Graphics;foreach(int selectedIndex inthis.listBox1.SelectedIndices){if(index == selectedIndex){//Draw the new background colour
e.DrawBackground();
g.FillRectangle(newSolidBrush(Color.Red), e.Bounds);}}//Get the item detailsFont font = listBox1.Font;Color colour = listBox1.ForeColor;string text = listBox1.Items[index].ToString();//Print the text
g.DrawString(text, font,newSolidBrush(Color.Black),(float)e.Bounds.X,(float)e.Bounds.Y);
e.DrawFocusRectangle();}
Malheureusement, ma source de données est une Liste de la Classe d'Entité. Donc, j'ai le même code avec le accepté la réponse ci-dessus, mais avec des modifications mineures pour sélectionner la propriété exacte de ma Classe que j'ai besoin sur Cordon de serrage pour ma ListBox:
if(e.Index<0)return;if((e.State&DrawItemState.Selected)==DrawItemState.Selected)
e =newDrawItemEventArgs(e.Graphics,
e.Font,
e.Bounds,
e.Index,
e.State^DrawItemState.Selected,
e.ForeColor,Color.Yellow);
e.DrawBackground();//This is my modification below:
e.Graphics.DrawString(ctListViewProcess.Items.Cast<entMyEntity>().Select(c => c.strPropertyName).ElementAt(e.Index), e.Font,Brushes.Black, e.Bounds,StringFormat.GenericDefault);
e.DrawFocusRectangle();
Vous devez remplacer le
Drawitem
de l'événement et de l'ensemble de laDrawMode
propriétéDrawMode.OwnerDrawFixed
vérifier cet échantillon
J'espère que cela va aider quelqu'un dans le futur, comme le code ci-dessus m'a aidé, mais pas à 100%
J'ai toujours eu les problèmes suivants:
- lorsque j'ai sélectionné un autre indice, vient d'être choisi comme indice permettrait également de mettre en évidence en rouge.
- quand j'ai changé la taille de la police de la zone de liste, la zone en surbrillance serait à petit.
Ci-dessous résout ce problème
J'ai aussi fait référence à l' MSDN site web.
Le code ci-dessous fait exactement ce que vous dites:
Dans la méthode InitializeComponent:
Et les gestionnaires d'événements:
Code est pris à partir de:
http://www.weask.us/entry/change-listbox-rsquo-selected-item-backcolor-net
J'ai le même problème.
Malheureusement, ma source de données est une Liste de la Classe d'Entité. Donc, j'ai le même code avec le accepté la réponse ci-dessus, mais avec des modifications mineures pour sélectionner la propriété exacte de ma Classe que j'ai besoin sur Cordon de serrage pour ma ListBox: