我想增加列表框中項目的高度 - 基本上在內部填充它們。除此之外,我不想更改默認的列表框行爲。我遵循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。 –