Почему 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. Теперь он больше не мерцает.

Другие вопросы по тегам