Windowsform zeichnet sich zu langsam

Zhoragh

Mitglied
Ich habe ein eigenen Dialog gestalltet, wenn ich jetzt das Programm starte und das Form vergrößere zeichnet er die Elemente auf den Form viel zu langsam nach. Gibt es eine möglichkeit das Zeichnen zu verschnellern?
 
Positionierst Du die Elemente neu oder verwendest Du das Contol.Anchor Property?

Zeichnest Du etwas in den Dialog? Wenn ja, dann verwende Contol.SuspendLayout() und Contol.ResumeLayout() damit das eigentliche Zeichnen erst nach Abschluss der Operation durchgeführt wird. Zusätzlich dazu kannst noch das Double Buffering aktivieren, sofern Du von dem Control ableitest, in das hineingezeichnet wird. Folgendes musst dafür in dem Konstruktor hinzufügen:
C#:
base.SetStyle( ControlStyles.DoubleBuffer, true );
 
Also DoubleBuffer ist an und ich hab das mit dem SuspendLayout und ResumeLayout in Begin und EndResize reingemacht aber ohne wirkliche Besserung.

Ich plazier das ganze mit anchor
 
Mach mal einen Screen bitte, sofern dir das gestattet ist. Wenn dein Form voll mit Controls ist, kann es schon durchaus sein, dass sowas der Fall ist. Aber nur wenn es wirklich voll ist. Ansonsten musst Du zusehen, dass Du kostspielige Zeichensachen aussetzen lässt, bis das Form fertig vergrößert oder verschoben wurde.

Un das fest zu stellen, kannst das verwenden:
C#:
protected override void WndProc( ref Message m )
{
	if ( m.Msg == (int) NativeMethods.WindowMessages.WM_EXITSIZEMOVE )
		/**/
	base.WndProc( ref m );
}
 
Den CodeSchnipsel von dir kann ich leider nicht benutzen weil er mir ausgibt das ich nicht die nötige Sicherheitsebene besitze. Kann ich das irgendwie einstellen. Ich Schreibe übrigens in c#.
 
Die Fehlermeldung sieht wie Follgt aus:

Fehler 1
Der Zugriff auf "System.Drawing.NativeMethods" ist aufgrund der Sicherheitsebene nicht möglich...

Und auf dem Rechter auf dem ich programmiere hab ich volle Adminrechte

Und hier noch der Screenshot:
 

Anhänge

  • screen1.png
    screen1.png
    5,5 KB · Aufrufe: 210
Zuletzt bearbeitet:
Ach, daher kam die Meldung. :-(
NativeMethods.WindowMessages.WM_EXITSIZEMOVE ist ein Member der NativeMethods.WindowMessages Enumeration, die ich selber erstellt habe. Die Codes kannst in der WinAPI Dokumentation in dem MSDN nachlesen.
C#:
const int WM_EXITSIZEMOVE = 0x0232

//Edit: Wegen dem Flackern... Die Oberfläche schaut sehr simpel aus. Dachte anfangs Du machst diverse Zeichenprozesse via GDI+ (System.Drawing.Graphics).

Solange Du keine diversen Aktionen während des Vergrößerns oder des Verkleinerns vor nimmst, kann das Flackern nur durch das Neuzeichnen der Steuerelemente entstehen. Was idR nur bei äußerst schwachen Rechnern mit langsamen Grafikkarten der Fall ist. Wenn Du einen sehr schnellen Rechner hast, kann auch irgend ein Programm den globalen MessageLoop blockieren bzw. bremsen...
Hast das Programm auch schon mal auf einem anderen Rechner ausprobiert?
 
Zuletzt bearbeitet:
Na ja langsam ist mein Rechner eigentlich nicht :). Hast du einen Tip wie ich herrausbekommen könnte ob ein Programm die MessageLoop blockier/blockt?
 
Na ja langsam ist mein Rechner eigentlich nicht :). Hast du einen Tip wie ich herrausbekommen könnte ob ein Programm die MessageLoop blockier/blockt?
Indem Du mal Skype aus machst. :D Naja, das verursacht bei mir schon recht viel Wind, besonders bei'm debuggen. Auch der Maxthon Browser bremst einiges. Aber das direkt herausfinden kannst nur, indem Du alles mal nacheinander zu machst...

Und, hast das Programm auch mal auf einem anderen Rechner ausprobiert?
 
Zurück