如何更改ListBox中所选项目的ForeColor?

4
我在我的项目中遇到了一个小问题,我该如何更改 ListBox 中所选项的文本前景色。我可以选择所有的 ListBox 项目,但我不知道如何更改选定项目的文本前景色。
这是我在项目中用于选择列表框项目的代码。
for (int i = 0; i < lbProductsToBuy.Items.Count; i++)
{
     lbProductsToBuy.SetSelected(i,true);
}
printreceiptToken1();
dataGridView67.Rows.Clear();

谢谢。在这些图像中,您可以看到我的应用程序的用户界面。 image1image2。请看最后一张图片,我想改变这些选定项目的前景色。


请帮我提供最佳解决方案,谢谢。 - michael john
1个回答

5
您可以将ListBoxDrawMode属性设置为OwnerDrawFixed,然后处理控件的DrawItem事件并自己绘制项目:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    var listBox = sender as ListBox;
    var backColor = this.BackColor;         /*Default BackColor*/
    var textColor = this.ForeColor;         /*Default ForeColor*/
    var txt = listBox.GetItemText(listBox.Items[e.Index]);
    if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
    {
        backColor = Color.RoyalBlue;        /*Seletion BackColor*/
        textColor = Color.Yellow;           /*Seletion ForeColor*/
    }
    using (var brush = new SolidBrush(backColor))
        e.Graphics.FillRectangle(brush, e.Bounds);
    TextRenderer.DrawText(e.Graphics, txt, listBox.Font, e.Bounds, textColor,
        TextFormatFlags.VerticalCenter | TextFormatFlags.Left);
}

enter image description here


1
  1. 也许您忘记将 ListBoxDrawMode 属性设置为 OwnerDrawFixed
  2. 也许您忘记将 listBox1_DrawItem 方法附加到您的 ListBoxDrawItem 事件上
- Reza Aghaei
抱歉,但您不理解我想要的。 - michael john
你正在寻找设置所选项目前景色的方法,是吗?该帖子展示了使用黄色前景色的所选项目。 - Reza Aghaei
我希望当我点击按钮时,列表框中所有现有项目的前景色都会更改,之后如果我在该列表框中添加新项目,则该项的前景色为黑色而不是更改。 - michael john
这是你完成这项工作的唯一方法,对我来说,你不理解解决方案的哪个部分很奇怪。帖子显然回答了你的问题。你需要选择所有项目,这样所有项目的颜色都会变成黄色。然后如果你取消选择所有项目,所有项目将显示为黑色。当你使用 ListBox 时,使用自绘列表框是唯一的选项。否则,你应该使用 ListView 或 DataGridView。 - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接