c# background color - Hintergrundfarbe eines ListBox-Objekts (winforms)





2 Answers

Danke für die Antwort von Grad van Horck , es hat mich in die richtige Richtung gelenkt.

Zur Unterstützung von Text (nicht nur Hintergrundfarbe) hier ist mein voll funktionsfähiger Code:

//global brushes with ordinary/selected colors
private SolidBrush reportsForegroundBrushSelected = new SolidBrush(Color.White);
private SolidBrush reportsForegroundBrush = new SolidBrush(Color.Black);
private SolidBrush reportsBackgroundBrushSelected = new SolidBrush(Color.FromKnownColor(KnownColor.Highlight));
private SolidBrush reportsBackgroundBrush1 = new SolidBrush(Color.White);
private SolidBrush reportsBackgroundBrush2 = new SolidBrush(Color.Gray);

//custom method to draw the items, don't forget to set DrawMode of the ListBox to OwnerDrawFixed
private void lbReports_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    bool selected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected);

    int index = e.Index;
    if (index >= 0 && index < lbReports.Items.Count)
    {
        string text = lbReports.Items[index].ToString();
        Graphics g = e.Graphics;

        //background:
        SolidBrush backgroundBrush;
        if (selected)
            backgroundBrush = reportsBackgroundBrushSelected;
        else if ((index % 2) == 0)
            backgroundBrush = reportsBackgroundBrush1;
        else
            backgroundBrush = reportsBackgroundBrush2;
        g.FillRectangle(backgroundBrush, e.Bounds);

        //text:
        SolidBrush foregroundBrush = (selected) ? reportsForegroundBrushSelected : reportsForegroundBrush;
        g.DrawString(text, e.Font, foregroundBrush, lbReports.GetItemRectangle(index).Location);
    }

    e.DrawFocusRectangle();
}

Das obige fügt dem gegebenen Code hinzu und zeigt den richtigen Text an und hebt das ausgewählte Element hervor.

item

Wie kann ich die Hintergrundfarbe eines bestimmten Elements in einer System.Windows.Forms.ListBox festlegen? Ich würde gerne in der Lage sein, wenn möglich mehrere zu setzen.




     public Picker()
    {
        InitializeComponent();
        this.listBox.DrawMode = DrawMode.OwnerDrawVariable;
        this.listBox.MeasureItem += listBoxMetals_MeasureItem;
        this.listBox.DrawItem += listBoxMetals_DrawItem;
    }

    void listBoxMetals_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
        Brush myBrush = Brushes.Black;
        var item = listBox.Items[e.Index] as Mapping;
        if (e.Index % 2 == 0)
        {
            e.Graphics.FillRectangle(new SolidBrush(Color.GhostWhite), e.Bounds);
        }
        e.Graphics.DrawString(item.Name,
            e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
        e.DrawFocusRectangle();
    }

Vollständige Probe




Related