如何将列表框中所选项目的颜色更改为特定的ARGB值?

时间:2019-05-21 10:17:45

标签: c# winforms colors listbox selected

我想将列表框中所选项目的颜色更改为特定的ARGB值。 如果未选中它,则会显示我在listBox的“属性”中定义的ForeColor。

但是无论我如何尝试,都是将画笔设置为预定义的颜色(白色,绿色等), 在选择和未选择两种颜色的同时更改颜色... 或根本没有改变。 我在stackoverflow上看到的解决方案是基于XAML的,但是我使用的是Winforms C#.NET,所以这不是一个选择。

我已经设法使用OwnerDrawFixed作为DrawMode和一个自定义的DrawItem预定义了自定义listBox,如下所示:

        {
            SolidBrush myBrushBack = new SolidBrush(Color.FromArgb(255, 42, 42, 42));
            SolidBrush myBrushFore = new SolidBrush(Color.FromArgb(255, 62, 182, 86));

            if (e.Index < 0) return;
            e.DrawBackground();
            Graphics g = e.Graphics;
            Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ?
                            myBrushBack : new SolidBrush(e.BackColor);
                            myBrushFore : new SolidBrush(e.ForeColor);

            g.FillRectangle(brush, e.Bounds);
            SizeF size = e.Graphics.MeasureString(listBoxTracks.ToString(), e.Font);
            e.Graphics.DrawString(listBoxTracks.Items[e.Index].ToString(), e.Font,
                     new SolidBrush(e.ForeColor), e.Bounds.Left + (e.Bounds.Width / 29 - size.Width / 39), e.Bounds.Top + (e.Bounds.Height / 2 - size.Height / 2), StringFormat.GenericDefault);
            e.DrawFocusRectangle();

        }

此代码没有给我我想要的正确绿色+更改了两者的选定和未选定文本颜色:

 e.Graphics.DrawString(listBoxTracks.Items[e.Index].ToString(), e.Font, Brushes.Green, e.Bounds, StringFormat.GenericDefault);

现在的行为:https://imgur.com/a/VvhDjqQ

我希望它如何表现:https://imgur.com/a/IqNT70p

1 个答案:

答案 0 :(得分:0)

感谢Jimi,我已经改编了代码,现在可以使用以下代码正常工作:

bs.swap(i, i + 1)