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




3 Answers

Die einzige Möglichkeit, dies zu erreichen, ist, die Objekte selbst zu zeichnen.

Setzen Sie den DrawMode auf OwnerDrawFixed

und so etwas beim DrawItem-Ereignis codieren:

private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    Graphics g = e.Graphics;

    g.FillRectangle(new SolidBrush(Color.Silver), e.Bounds);

    // Print text

    e.DrawFocusRectangle();
}

Die zweite Option wäre die Verwendung einer ListView, obwohl sie eine andere Art von Implementierung haben (nicht wirklich datengebunden, aber flexibler in der Art von Spalten).

color 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.




// Set the background to a predefined colour
MyListBox.BackColor = Color.Red;
// OR: Set parts of a color.
MyListBox.BackColor.R = 255;
MyListBox.BackColor.G = 0;
MyListBox.BackColor.B = 0;

Wenn das, was Sie meinen, indem Sie mehrere Hintergrundfarben einstellen, eine andere Hintergrundfarbe für jedes Element einstellt, ist dies nicht mit einer ListBox möglich, sondern IS mit einer ListView, mit etwas wie:

// Set the background of the first item in the list
MyListView.Items[0].BackColor = Color.Red;



private void listbox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
        {
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
                var item = listbox1.Items[e.Index];
                if(e.Index % 2 == 0)
                {
                    e.Graphics.FillRectangle(new SolidBrush(Color.Gold), e.Bounds);
                }


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


public MainForm()
        {
            InitializeComponent();
            this.listbox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listbox1_DrawItem);
        }



Related

c# winforms listbox colors