Laden...

Usercontrol in Form hinzufügen - DockStyle.Fill wird sichtbar ausgeführt

Erstellt von Sythus vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.528 Views
S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren
Usercontrol in Form hinzufügen - DockStyle.Fill wird sichtbar ausgeführt

Hallo zusammen,

da Usercontrols im Designer nicht die Eigenschaft Dock haben und ich so dem Usercontrol nicht sagen kann das sich dieser an seinen Container bzw. Parent anpassen soll - muss ich dem control nach dem erstellen diese Eigenschaft extra mitgeben.

Nun ist es aber so, das - sobald ich zur Laufzeit ein Usercontrol auf ein Form adden will, ich sehen kann wie das Control erst in der ursprünglichen größe auf das Form gezeichnet wird und dann erst durch Dockstyle.Fill sich an die größe des Außencontainers anpasst.

Diesen Effekt finde ich sehr unschön, da je nach Rechnerleistung das "anpassen" auch mal länger dauern kann.

Gibt es eine Möglichkeit das Control erst unsichtbar zu zeichnen und dann schlagartig anzuzeigen? Ich hoffe man versteht mein Problem.

Das Control wird nicht gleich so wie es sein soll angezeigt. Sondern man sieht wie es sich in dem Container anpasst.

Hier noch ein bisschen Code:


            MeinControl gui = new MeinControl ();
            gui.Dock = DockStyle.Fill;

            MeinForm.innerPanel.Controls.Add(gui);

Ich hab es schon mit visible versucht oder Dockstyle in InitializeComponent() zu setzen und und und... doch überall der gleiche unschöne Effekt.

Ich hoffe man kann mir hier helfen.

Vielen dank schonmal,

Gruß Sythus

B
387 Beiträge seit 2005
vor 13 Jahren

Hi,

wär mir zwar noch nie aufgefallen, aber du kannst vorher die Position deines Controls auf 0,0 setzen und die Größe auf die ClientRectangle Eigenschaft des Ziel-Containers.

Somit gäbe es nach dem Dock.Fill erst einmal keine Größenänderung und du dürftest diesen Effekt nicht mehr haben.

Gruß

S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren

Danke schön,

aber das hab ich nicht ganz verstanden. Dem Control kann ich keine Position geben.
Über ClientRectangle gehts, aber ich kann ClientRectangle keinen Wert zu weisen.
Hättest du ein kleines Beispiel für mich?

Danke 😃

B
387 Beiträge seit 2005
vor 13 Jahren

Jedes Control hat zwar keine Position, aber dafür eine Location ^^
macht aber das Gleiche.

Du programmierst noch nicht wirklich lange, oder?
Das hier würde ich jetzt mal zu den Grundlagen zählen. Probier mal selber rum, vorkauen will ich dir dass jetzt nicht.

Gruß

S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren

Hallo 😃

ja du hast recht^^ und in Foren neige ich manchmal dazu ein bisschen mehr zu fragen anstatt selbst schnell zu googeln - muss ich mir abgewöhnen, Sorry 😃

Dein Tip war schon super..


            gui.Location = new System.Drawing.Point(0, 0);
            gui.Width = ClientForm.ClientRectangle.Width;
            gui.Height = ClientForm.ClientRectangle.Height;

Nun sehe ich wenigstens nicht mehr wie sich das Control von klein in groß im Form anpasst. Es hat sofort die richtige Größe. Das ist ein Schritt nach vorne 😃

Danke dir.

Dennoch sieht das laden des UserControls zur laufzeit zu sehr nach "aufbauen" aus.
Toll wäre es wenn es sofort angezeigt werden würde. Kann man das evtl. schon im Hintergrund vorladen?

Gruß

T
111 Beiträge seit 2005
vor 13 Jahren

Hallo

wieso bist Du der Meinung, das ein Usercontrol keine Dock-Eigenschaft hat?

Thomas

771 Beiträge seit 2009
vor 13 Jahren

Zum Thema "Forms vorladen" schau mal in diesen Beitrag: "Vorladen" von Forms

S
Sythus Themenstarter:in
166 Beiträge seit 2009
vor 13 Jahren

Hallo zusammen 😃

@ Thomas - doch die Dock Eigenschaft ist vorhanden, allerdings nicht im Designer (warum auch immer) - das hatte ich gemeint

@ cat - vielen Dank für den Tip, ich habs damit etwas versucht allerdings mit mäßigem Erfolg. Allerdings stammt der helfende Tip auch aus dem von dir geposteten Beitrag.

Das Load Event bzw. der Code den ich darin ausgeführt habe war verantwortlich für die lange "Ladedauer".
Lasse nun den Code des Load Events in einem Thread laufen. Das hilft schonmal enorm.

Das ich danicht von alleine drauf gekommen bin ist schade^^

Danke an alle beteiligten.

T
111 Beiträge seit 2005
vor 13 Jahren

Hallo

also bei mir ist die Eigenschaft auch im Designer vorhanden. Welche Version von VS verwendest Du?

Thomas

G
538 Beiträge seit 2008
vor 13 Jahren

Ich würd ja vor sowas evtl SuspendLayout() ausführen

Control.SuspendLayout-Methode

Damit unterbindest du den "Aufbaueffekt", allerdings wird's dadurch nicht unbedingt schneller 😉

So kannste auch ohne Sorge wieder die Dock eigenschaft nutzen (was im Hinblick auf Größenveränderung des Fensters evtl. sinnvoll ist

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)