Laden...

Form mit FormBorderStyle.None resizen

Erstellt von der-Webdesigner vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.348 Views
D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren
Form mit FormBorderStyle.None resizen

Hi zusammen!

Ich hätte da nochmals eine Frage...und zwar habe ich bei meiner Form den FormBorderStyle auf None gesetzt und somit mein eigenes Design kreiert. Das Verkleinern, Maximieren, Schließen und Verschieben der Form klappt bereits alles super, außer dass die Maximieren-Property die Taskbar verdeckt. Aber das ist erstmal nicht weiter schlimm.

Nun möchte ich meine Form natürlich auch vergrößern und verkleinern können. Dazu habe ich mir beispielsweise ein 3x3 Panel in die linke obere Ecke gelegt und den Cursor beim Mouseover verändert. Anschließend verändere ich einfach die Größe und die Position meiner Form beim MouseDown.
Mein Problem dabei ist, dass es extrem häßlich aussieht, da zuerst skaliert wird, also nach unten rechts hin und danach verschiebe ich das Fenster nach oben links. Somit simuliere ich eigentlich exakt das Verhalten einer Form wenn sie skaliert wird, aber es flackert ganz schön und wenn man schnell skaliert sieht man sehr deutlich, dass die beiden genannten Schritte nacheinander ausgeführt werden.
Gibt es da vielleicht eine schönere Lösung oder würden 2 Threads dafür Abhilfe schaffen?

Was denkt ihr darüber wenn ich meine Form lediglich unten rechts skalierbar machen würde, denn da ist es ja recht einfach, da ich lediglich die Größe der Form verändern muss, mehr nicht.

Danke für eure Hilfe/Meinungen.
Manuel

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo der-Webdesigner,

was das Flackern, angeht: mittlerweile wurde kaum ein Thema öfter besprochen. Bitte benutze die Forumssuche und poste die besten Treffer hier. Vielen Dank!

oder würden 2 Threads dafür Abhilfe schaffen?

nein, auf keinen Fall. Threads wären hier kontraproduktiv, zumal alle GUI-Operationen sowieso im GUI-Thread laufen müssen (siehe [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)).

Was denkt ihr darüber wenn ich meine Form lediglich unten rechts skalierbar machen würde,

Das wäre ein zu hoher Preis.

herbivore

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo der-Webdesigner,

generell solltest du lieber den Ansatz aus [Artikel] Custom Window Border für Form's wählen, um deiner Form einen benutzerdefinierten Rahmen zu geben - dann sollten sich deine Probleme von selbst erledigen.

Ansonsten liefert der Thread dir bestimmt auch weitere Hinweise.

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Hallo ihr beiden!

Dann habe ich wohl nach den falschen Themen gesucht. Ich werde auf jeden Fall drauf achten herbivore.

Der Artikel hilft mir zum Teil schon mal weiter. Ich muss nur gestehen, dass ich den Quellcodeteil, der das Flackern verhindern soll, überhaupt nicht verstehe.
Die Meldungen so abzufangen ist sicherlich eine gute Idee, aber die Border habe ich jetzt schon mit einem anderen Panel gezeichnet, in dem die OnPaint-Methode überschrieben wird. Somit kann ich meinem Panel auch andere Border-Farben zuweisen. Die restliche GUI habe ich im Design-View erstellt, heißt damit würde ich dann natürlich auch gerne weiter arbeiten, auch wenns sicherlich nicht ganz so professionell ist wie das Beispiel von egrath.

Ich bin mir zudem unsicher wo dort im Quellcode definiert wird, dass sich diese Form skalieren lässt.

Wahrscheinlich würde es für meine Zwecke dann reichen, wenn ich einfach 4 unsichtbare Panels in den Ecken platziere und die entsprechenden Funktionen anschließend aufrufe. Lediglich das Flackern müsste ich dann noch in den Griff bekommen.

Danke euch beiden,
Manuel

F
258 Beiträge seit 2008
vor 15 Jahren

Reicht es unter C# nicht, die Eigenschaft "Doublebuffered" der Form auf true zu stellen?

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Ich habs gerade mal ausprobiert, es scheint jedoch nicht wirklich was zu ändern. Schade. 😉