winforms 更改项列表框颜色C#

bkhjykvo  于 2022-12-14  发布在  C#
关注(0)|答案(2)|浏览(218)

我已经创建了一个ListBox,在代码编译过程中向其中添加元素。并且我希望在添加一个元素时记录它的颜色(以便每个添加的元素都有不同的颜色)

listBox1.Items.Add(string.Format("Місце {0} | В роботі з {1} | ({2} хв)", temp[7].Substring(6, 4), temp[8].Substring(11, 5), rezult));   `

我尝试了所有可能的方法

BackColor = Color.Yellow;ForeColor = Color.Yellow;

我正在使用列表框,因为我已经看到了这么多关于ListView的答案。

1tu0hz3e

1tu0hz3e1#

将列表框DrawMode设置为OwnerDrawFixed或OwnerDrawVariable,并将其设置为DrawItem事件处理程序:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e){
    if(e.Index == 1) e.DrawBackground(); //use e.Index to see if we want to highlight the item
    else e.Graphics.FillRectangle(new SolidBrush(Color.Yellow), e.Bounds); //This does the same thing as e.DrawBackground but with a custom color
    e.DrawFocusRectangle();
    if(e.Index < 0) return;
    TextRenderer.DrawText(e.Graphics, (string)listBox1.Items[e.Index], listBox1.Font, e.Bounds, listBox1.ForeColor, TextFormatFlags.Left);
}
pxyaymoc

pxyaymoc2#

好吧,我最好的想法是不使用列表框,而是flowLayoutPanel,并在您将有标签的地方添加用户控件。
flowLayoutPanel是一个可以滚动的控件列表,因此我们将创建一个usercontrol,在其中放置标签并更改usercontrol的背景。不要忘记将AutoScroll功能打开为flowLayoutPanel,否则滚动条将不起作用,甚至不会显示。
如果您希望能够单击,只需添加到标签单击事件。

public void CreateItem(Color OurColor, string TextToShow)
        {
    
    
            Label OurText = new Label()
            {
                Text = "TextToShow",
                Font = new Font("Segoe UI", 8f),
                Location = new Point(0, 0),
                AutoSize = true,
    
            };
    
            UserControl OurUserControl = new UserControl();
    
            OurUserControl.Size = new Size((int)((double)flowLayoutPanel1.Width * 0.9) , OurText.Font.Height);
    
            OurUserControl.BackColor = OurColor;
            OurUserControl.Controls.Add(OurText);
    
            flowLayoutPanel1.Controls.Add(OurUserControl);
            
            
        }

相关问题