Laden...

Listview Flackert beim Update

Erstellt von Sclot vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.695 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren
Listview Flackert beim Update

Guten Abend,

Ich habe ein Listview mit 6 Einträgen - jeweils 3 davon in einer Gruppe (insgesamt also 2 Gruppen).

Der sinn des ListView ist es einen Status von 6 Funktionen anzuzeigen (OK/FALSE).

Ich habe vor das Update einmal in der Sekunde zu machen.
Dies sieht nach diesem schema aus:

beginupdate();
clear();
add(...);
endupdate();

Das Problem ist in der Überschrift erklärt.
Es flackert bei jedem Update, was echt unschön aussieht.

Ich habe gelesen das man da auch was mit dem Vitualmode machen kann - verstanden hab ich das ganze aber noch nicht (also wie ich die Items im Virtualmode hinzufügen kann).

Hat jemand hierfür ein kleines Beispiel?

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo,

das wird funktionieren, wenn du DoubleBuffering oder/und BeginUpdate - EndUpdate verwendest.
Guckst du hier: http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx

Dieses Thema wurde bereits hier behandelt: Listview Flackert, egal was ich mache

Gruss
Michael

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Sclot,

SuspendLayout
DoubleBuffered

Außerdem könntest du versuchen, nur den Inhalt der ListView-Items zu ändern, statt sie zu löschen und neu einzufügen.

VirtualMode ist für große Datenmengen

herbivore

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren

Danke euch, werd mal lesen... 🙂

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren

OK...
Mit Buffern klappt es wirklich 🙂

Muss aber in einer Abgeleiteten ListView stehen - und da im Konstruktor auch nur das OptimizedDoubleBuffer.

namespace daemon.Controls
{
	public partial class BufferedListview : ListView
	{
		public BufferedListview()
		{
			InitializeComponent();
			this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
		}
	}
}

^^ damit funktioniert es dann 🙂

Danke euch.

5.299 Beiträge seit 2008
vor 15 Jahren

oder die protected bool property Doublebuffered auf true setzen.

Der frühe Apfel fängt den Wurm.

1.665 Beiträge seit 2006
vor 15 Jahren

Wie herbivore schon geschrieben hat, würde ich es über ein Item-Update lösen.
Es ist nicht gerade optimal, das einfach mit DoubleBuffered totzuschlagen. Man sollte möglichst ressourcenschonend arbeiten und da bietet sich das eben an.