Почему ListBox мигает при выполнении события DrawItem?
У меня есть ListBox, и он имеет событие DrawItem, определенное следующим образом. Следующие свойства ListBox устанавливаются так: DrawMode = OwnerDrawFixed и FormattingEnabled = ture.
Когда я запускаю программу и добавляю более одного элемента или объекта в ListBox, она очень сильно мерцает. Я не уверен, в чем именно проблема. У меня есть ListBox с очень похожей настройкой на других winforms, и они не мерцают. Я пытаюсь захватить изображение winform с мерцающим ListBox, но захваченное изображение не показывает мерцание ListBox каждый раз.
method HTrendFrm.AGroupList_DrawItem(sender: System.Object; e: System.Windows.Forms.DrawItemEventArgs);
var
lb:ListBox;
tg:TTrendGroup;
begin
if e.Index = -1 then exit;
lb := (sender as ListBox);
tg := TTrendGroup(LoggingGroup.Item[e.Index]);
if tg.Enabled then
begin
if ((e.State and DrawItemState.Selected) = DrawItemState.Selected) then
begin
lb.ForeColor:=Color.White;
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
end
else
lb.ForeColor := Color.Black;
end
else
lb.ForeColor := Color.LightGray;
lb.CreateGraphics.DrawString(tg.name,new Font('Arial',9,FontStyle.Bold),new SolidBrush(lb.ForeColor),e.Bounds.Left+5,e.Bounds.Top);
if ((e.State and DrawItemState.Focus) <> DrawItemState.Checked) then
e.DrawFocusRectangle();
end;
Итак, что вызывает мой мерцание ListBox?
Заранее спасибо,
1 ответ
Я последовал предложению LarsTech, и оно работает, как и ожидалось.
Я полностью удалил список lb и заменил его на e.Graphics. Теперь он больше не мерцает.