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
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ß
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 😃
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ß
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ß
Hallo
wieso bist Du der Meinung, das ein Usercontrol keine Dock-Eigenschaft hat?
Thomas
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.
Hallo
also bei mir ist die Eigenschaft auch im Designer vorhanden. Welche Version von VS verwendest Du?
Thomas
Ich würd ja vor sowas evtl SuspendLayout() ausführen
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)