2014-11-03 5 views
0

У меня есть ListView в VB.NET 2013, работающий в VirtualMode, который я использую для отображения активного журнала. Он отлично работает, за исключением случаев, когда у меня есть элемент, сфокусированный вне видимых границ ListView: в этом случае, когда я добавляю элемент в ListView, он мерцает, прокручивая его до сфокусированного элемента, а затем немедленно возвращается в предыдущую позицию.ListView мерцает, когда объект сфокусирован

элемент управления ListView также DoubleBuffered используя этот код:

Dim pi As PropertyInfo = ListView1.GetType.GetProperty("DoubleBuffered", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic) 
pi.SetValue(ListView1, True, Nothing) 

Кроме того, я обнаружил, что, когда я иду в верхней части ListView, это подводит меня к сфокусированного пункту, и не вернуться ,

Если я пытаюсь отключить режим с двойной буферизацией, каждый раз, когда я добавляю элемент, каждый раз, когда я добавляю элемент, белая рамка окрашивается, и это неприемлемо, так как журнал добавляет много элементов каждую секунду.

+1

'журнал добавляет много элементов каждую секунду.« Это не очень удобно: пользователь не может быстро это прочитать. Похоже, вы слишком часто обновляете GUI, слишком часто. – LarsTech

+0

Я знаю, но журнал берется из внешнего источника: это системный журнал Android. Поэтому у меня нет контроля над количеством элементов. – MMauro

ответ

0

Попробуйте использовать ListView1.BeginUpdate() и ListView1.EndUpdate() до и после смены фокуса.

+0

До тех пор, как я знаю, методы BeginUpdate() и EndUpdate() полезны только тогда, когда вы ** не ** используете VirtualMode. См. [Этот вопрос] (http://stackoverflow.com/questions/17285507/is-it-useful-to-call-beginupdate-endupdate-with-a-virtual-listview) – MMauro