我想将列表框中所选项目的颜色更改为特定的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
答案 0 :(得分:0)
感谢Jimi,我已经改编了代码,现在可以使用以下代码正常工作:
bs.swap(i, i + 1)