Vermeiden Sie Flackern in Windows Forms?

7

Doppelpufferung funktioniert nicht mit Combobox. Gibt es noch andere Methoden, um das Flackern in Windows-Formularen zu vermeiden?

Ich habe ein Windows-Formular mit einer Anzahl von Feldern. Ich zeige immer nur ein Panel basierend auf meiner Menüauswahl.

Ich habe ein Icon-Panel, ein Header-Panel und das Kombinationsfeld. basierend auf dem ausgewählten Element dieser Combo-Box füllen sich die Gridview1 und 2. Wenn ich das Kombinationsfeld mit dem Tastatur-Abwärtspfeil schnell auswähle, werden das Symbolfeld und das Kopfzeilenfeld immer neu gezeichnet. Ich muss das beide ohne Änderung behalten. diese beiden Panels erzeugen einen blinkenden Effekt (dh sie blinken oder blinken), während ich den ausgewählten Index des Kombinationsfelds ändere. Gibt es eine Möglichkeit, dieses Blinken zu vermeiden? Ich habe versucht Double-Buffered in Form Konstruktor und Formular laden Ereignis. Bitte helfen Sie ..............

%Vor%

Ich habe diesen Code in Form constuctor und form load event

ausprobiert     
ManjuVijayan 10.10.2012, 07:04
quelle

3 Antworten

23

Noch eine andere Lösung:

%Vor%

Und Ihr Formularkonstruktor sollte wie folgt aussehen:

%Vor%

Im obigen Code könnten Sie this.Handle in etwas wie MyFlickeringPanel.Handle

ändern

Sie können hier ein bisschen mehr darüber lesen: Erweiterte Fensterstile und hier: CreateWindowEx .

  

Mit WS_EX_COMPOSITED festgelegt, alle Nachkommen eines Fensters erhalten   Reihenfolge von unten nach oben mit Doppelpufferung. Unten nach oben   Die Reihenfolge der Bilder erlaubt es, dass ein nachgebendes Fenster eine Transluzenz (Alpha) hat   und Transparenz (Farbe-Key) Effekte, aber nur wenn der Abkömmling   Fenster hat auch das WS_EX_TRANSPARENT-Bit festgelegt. Doppel-Pufferung ermöglicht   das Fenster und seine Nachkommen sollen ohne Flackern gemalt werden.

    
Nikolay Khil 10.10.2012, 10:13
quelle
2

Lösung # 1:
Verwenden Sie ComboxBox.BeginUpdate() , bevor Sie Elemente hinzufügen. Dies verhindert, dass Control die ComboBox jedesmal neu erstellt, wenn ein Element zur Liste hinzugefügt wird. Nachdem Sie die Elemente hinzugefügt haben, können Sie ComboBox.EndUpdate() zum Neuzeichnen verwenden.

Lösung # 2

%Vor%     
varg 10.10.2012 07:20
quelle
2
%Vor%     
user3541403 03.12.2014 07:06
quelle

Tags und Links