【发布时间】:2012-10-11 01:12:53
【问题描述】:
我想增加列表框中项目的高度 - 基本上是在内部填充它们。除此之外,我不想更改默认列表框行为。我已按照 MSDN 示例进行所有者绘制的列表项,但我遇到了问题。默认列表框以黑色绘制项目,以蓝色突出显示选定的项目。为了完成同样的功能,我在 DrawItem 事件处理程序中使用了以下代码:
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Brush b = (e.Index == ((ListBox)sender).SelectedIndex ? Brushes.White : Brushes.Black);
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, b, new Rectangle(new Point(e.Bounds.X, e.Bounds.Y + 2), e.Bounds.Size));
e.DrawFocusRectangle();
}
这似乎工作正常,除非我在列表中单击。所选项目确实显示为蓝色背景上的白色文本,但之前选择的项目仍为白色。似乎我选择的项目被重绘,但之前选择的项目没有。如果我移动到另一个控件,列表框会重新绘制。我错过了什么?
【问题讨论】:
-
使用 SelectedIndex 是错误的,它的值会在不可预知的时刻发生变化。您必须改用 e.State。
标签: c# winforms listbox ownerdrawn