Entwickler-Ecke

WinForms - Flackern unterdrücken


texMan - Mi 24.01.18 19:31
Titel: Flackern unterdrücken
Hallo zusammen,

ich habe noch eine Frage.

Wie kann ich das Flackern, das beim Aktualisieren der Controls entsteht, unterdrücken?
Z.B. mYForm.SuspendLayout() funktioniert leider nicht.

Grüße
Jürgen

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Mi 24.01.18 19:39

Da gibt es keine wirkliche allgemeine Lösung. Du mußt uns schon sagen was für ein Control gemeint ist und was du ungefähr machst (ein Label oft zu aktualsieren ist was anderes als eine selbstgezeichnete Animation auf ein Panel zu bekommen).

Im Zweifel bräuchten wir auch Code um das nachstellen zu können. Im schlimmsten Fall ist das auch kein richtiges Winforms Problem sondern eins das mit speziellen Treibern/Graphikkarten auftritt.


Th69 - Mi 24.01.18 19:53

Schau mal die Möglichkeiten in [Artikel] Flackernde Controls und flackerndes Zeichnen vermeiden [https://www.mycsharp.de/wbb2/thread.php?threadid=59978] durch.


texMan - Mi 24.01.18 19:59

Echt super wie schnell man hier Hilfe bekommt.

Es handelt sich um ein ActiveX-Control in dem Dokumente geladen und gespeichert werden. Teilweise mehere Durchgänge hintereinander. Dabei wir jedesmal auch das ActiveX-Control aktualisiert.


texMan - Do 25.01.18 10:32

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal die Möglichkeiten in [Artikel] Flackernde Controls und flackerndes Zeichnen vermeiden [https://www.mycsharp.de/wbb2/thread.php?threadid=59978] durch.

Leider wird die SetStyle() Methode von dem ActiveX-Control nicht unterstützt.


Th69 - Do 25.01.18 11:49

ActiveX [https://de.wikipedia.org/wiki/ActiveX]-Controls sind ja auch keine auf WinForms-Control basierenden Elemente, sondern auf COM.

Probiere mal

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
protected override CreateParams CreateParams
{
    get
    {
        CreateParams handleParam = base.CreateParams;
        handleParam.ExStyle |= 0x02000000// WS_EX_COMPOSITED
        return handleParam;
    }
}
in der Form-Klasse (dies kann aber auch weitere negative Effekte auf andere Controls der Form haben). Du könntest auch mal nach "activeX erase background" suchen (das ist der häufigste Fall bezüglich des Flickerns).

Ist es denn zwingend erforderlich, daß das ActiveX-Control so häufig aktualisiert werden muß? Geht es um "Batch"-Vorgänge? Muß der User das dann alles zwingend sehen (wäre evtl. ein unsichtbares ActiveX-Control nicht auch möglich)?