Мерцание в элементе управления ListView (OwnerDraw, Virtual)

Этот вопрос можно считать продолжением -доМерцание в списке с помощью ownerdraw и virtualmode.

У меня есть элемент управления ListViewв Virtual mode, и я пытаюсь выполнить пользовательское рисование. Рендеринг элемента выполняется с помощью следующего переопределения метода:

protected override void OnDrawItem(DrawListViewItemEventArgs eventArgs) 

Как упоминалось в упомянутом вопросе, пользовательское рисование вводит мерцание при наведении курсора мыши на события. Отладчик сообщает мне, что это происходит из-за чрезмерного количества пользовательских событий отрисовки, которые запускаются.


Теперь -принятый ответ на упомянутый вопрос сообщает нам:

Это ошибка в.NET ListView, и вы не можете обойти ее с помощью двойная буферизация.

  • Итак, насколько надежна эта информация? Это действительно ошибка ? Или, может быть, мы просто пытаемся отрезать часть сообщений и надеемся, что это не изменит видимого поведения?

  • Верно ли, что если у меня есть процедура рисования моего владельца для ListViewв Virtual Mode,, я могу подавить эти события Custom Drawи выполнить только свое рисование в WM_PAINTили, может быть, это неправильно для некоторых случаев ?

  • Каковы предварительные условия для того, чтобы элемент управления System.Windows.Formsмог выполнять всю рисование в WM_PAINTбез изменения его начального поведения?

12
задан Community 23 May 2017 в 12:16
поделиться