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
ausprobiertNoch 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
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.
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%