---
title: "Problem med att färga item i listbox"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/175710-problem-med-att-färga-item-i-listbox"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2008-12-05T11:25:09.000Z"
updated: "2008-12-06T10:53:51.000Z"
replies: 5
views: 461
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/175710-problem-med-att-färga-item-i-listbox"
---

# Problem med att färga item i listbox

## #1 — saw, 2008-12-05T11:25Z

Jag försöker så här

```
private void lbWriter_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
            try
            {
                if (lbWriter.SelectedItem != null)
                {
                    myBrush = Brushes.White;
                }
                else
                {
                    myBrush = Brushes.Black;
                }

                e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
                e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
                e.DrawFocusRectangle();
            }
            catch { }
            
        }
```

Detta fungerar såtillvida att den selectade raden får vit text på blå bakgrund.
Problemet är att de andra posterna "försvinner" dvs de får den vita textfärgen.
Hur fixar jag detta?  :q

Permalänk: https://www.webforum.nu/p/175710

## #2 — Phorpher, 2008-12-05T12:34Z

Du kollar ju bara om SelectedItem inte är null och är den inte det så ritar du items med vit foreground.

lbWriter_DrawItem anropas när varje enskilt item i din listbox ska ritas ut och i ditt fall kollar du om SelectedItem är null. Dvs. om det finns något item i listboxen som är valt. I ditt fall så kommer alla items ritas med vit text eftersom din listbox har ett item valt.

I parametern DrawItemEventArgs finns en property "Index" som innehåller indexet på det item som ska ritas ut. Jämför det indexet med indexet på SelectedItem. Sammanfaller dem så ska du rita dem annorlunda.

Permalänk: https://www.webforum.nu/p/2158431

## #3 — saw, 2008-12-05T20:23Z

Jag försöker enligt dina anvisningar.

```
if (lbWriter.SelectedItem != null)
                {
                    if (Convert.ToInt32(lbWriter.SelectedIndex) == Convert.ToInt32(e.Index))
                    {
                        myBrush = Brushes.White;
                    }
                }
                else
                {
                    myBrush = Brushes.Black;
                }

 lErrorArrReg.Text = lbWriter.SelectedIndex.ToString() + " = " + e.Index.ToString();
```

Det gör ingen skillnad och jag kan se via min label(lErrorArrReg) att indexet 
stämmer men jag få inte ihop ifsatsen korrekt tror jag.

Permalänk: https://www.webforum.nu/p/2158514

## #4 — Phorpher, 2008-12-05T21:33Z

Gör såhär istället:

```
e.DrawBackground();
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
    e.Graphics.DrawString(lbWriter.Items[e.Index].ToString(), Font, Brushes.Red, e.Bounds);
    e.DrawFocusRectangle();
}
else
{
    e.Graphics.DrawString(lbWriter.Items[e.Index].ToString(), Font, Brushes.Black, e.Bounds);
}
```

Permalänk: https://www.webforum.nu/p/2158527

## #5 — saw, 2008-12-06T08:49Z

Helt suveränt, tusen tack.
En avslutande fråga på detta, går det enkelt att göra den selectade texten fet?

Permalänk: https://www.webforum.nu/p/2158567

## #6 — Phorpher, 2008-12-06T10:53Z

Ja, skapa en ny Font och ange FontStyle.Bold i konstruktorn. Använd sedan den när du ritar items som är selected.

Permalänk: https://www.webforum.nu/p/2158577

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/175710-problem-med-att-färga-item-i-listbox
