Control für austauschbaren inhalt ?
-
chrische5 schrieb:
Hallo
Schau dir das mal an:
http://www.mycsharp.de/wbb2/thread.php?threadid=52261
chrische
das heißt, das einzige was hier passiert ist z.B. 10 übereinander gelagerte panels je nach button klick ganz links mit :
_apnlContent [lbxSender.SelectedIndex].BringToFront ();nach vorne zu bringen ja? Sprich den Z-index zu ändern CSS mäßig ausgedrückt ^^
Wenn ich jetzt aber likns 20 buttons habe und jeder bringt ein panel zur Front sprich macht sichtbar ist das nicht sehr speicherhungrig 20 Panls mit allen Komponenten im Hintergrund zu halten?
-
Hallo
Ich würde aus Übersichtsgründen nicht mit Panles, sondern mit Usercontrols machen.
chrische
-
chrische5 schrieb:
Hallo
Ich würde aus Übersichtsgründen nicht mit Panles, sondern mit Usercontrols machen.
chrische
ja wie du hast es mir vorher doch empfohlen?
UserControl-Klasse
Stellt ein leeres Steuerelement zum Erstellen anderer Steuerelemente bereit.
Was genau stellst DU dir in MEINEM Fall unter einem usercontrol vor, wie sollte das aussehen?
-
Hallo
Wenn du mit einem Designer arbeitest und dann viele Panels verwendest, ist dies eher anstrengend, weil diese sich gegenseitig überdecken usw. Ich habe deswegen UserControls benutzt. Damit kannst du das Control einfach im Designer bearbeiten. Wenn du ohne Designer arbeitest, dürfte es egal sein. Erstelle mal ein UserControl und dann wirst du sehen, dass es in deiner ToolBox auftaucht. Dann kannst du es wie ein normales Control benutzen.
chrische
-
chrische5 schrieb:
Hallo
Wenn du mit einem Designer arbeitest und dann viele Panels verwendest, ist dies eher anstrengend, weil diese sich gegenseitig überdecken usw. Ich habe deswegen UserControls benutzt. Damit kannst du das Control einfach im Designer bearbeiten. Wenn du ohne Designer arbeitest, dürfte es egal sein. Erstelle mal ein UserControl und dann wirst du sehen, dass es in deiner ToolBox auftaucht. Dann kannst du es wie ein normales Control benutzen.
chrische
ok das mit dem UserControl kommt in meinem Buch drin, aber von was ist dieses UserControl abgeleitet bzw. was für eine Funktion hat es?
-
Hallo
Hää?? Hast du es mal probiert? Deine Fragen dürften sich beim Handlen klären.
chrische
-
UserControl erbt direkt von ContainerControl, deshalb kannst du andere Controls darauf platzieren.
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx
-
O.o schrieb:
UserControl erbt direkt von ContainerControl, deshalb kannst du andere Controls darauf platzieren.
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx
Mißverständnis... in meinem Buch heißt usercontrol = benutzerdefiniertes Steuerelement... das ist was abstraktes nix konkretes daher frage ich nach Klasse etc.. DANKE euch!
-
O.o schrieb:
UserControl erbt direkt von ContainerControl, deshalb kannst du andere Controls darauf platzieren.
http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx
das heißt mein usercontrol besteht lediglich aus einem panel das ich in mein windows form ziehe? Wo ist denn der Unterschied ob ich ein usercontrol oder nicht gleich ein panel auf meine Form ziehe?
panel = container
usercontrol = container
...
-
selina schrieb:
das heißt mein usercontrol besteht lediglich aus einem panel das ich in mein windows form ziehe? Wo ist denn der Unterschied ob ich ein usercontrol oder nicht gleich ein panel auf meine Form ziehe?
User control hat einen eigenen Konstruktor mit einer eigenen InitializeComponent()-Funktion. Du kannst also diese user controls separat entwerfen und wenn eines von ihnen benötigt wird, also im Menü ein Modul gewählt wird, kannst Du es on the fly konstruieren und anzeigen lassen (parent auf ein Hostcontainer im Form setzen). Du musst dann nicht alle Panels im Form hosten und Dich mit sichtbar/unsichtbar rumquälen. Sollte vor allem mit der Arbeit im Formeditor einfacher sein.
-
witte schrieb:
selina schrieb:
das heißt mein usercontrol besteht lediglich aus einem panel das ich in mein windows form ziehe? Wo ist denn der Unterschied ob ich ein usercontrol oder nicht gleich ein panel auf meine Form ziehe?
User control hat einen eigenen Konstruktor mit einer eigenen InitializeComponent()-Funktion. Du kannst also diese user controls separat entwerfen und wenn eines von ihnen benötigt wird, also im Menü ein Modul gewählt wird, kannst Du es on the fly konstruieren und anzeigen lassen (parent auf ein Hostcontainer im Form setzen). Du musst dann nicht alle Panels im Form hosten und Dich mit sichtbar/unsichtbar rumquälen. Sollte vor allem mit der Arbeit im Formeditor einfacher sein.
ok hört sich gut an, also entwerfe ich einfach 5 usercontrols bzw. 5 Klassen (von ContainerControl geerbt) wenn ich 5 austauschbare Bereiche habe. Wobei ich die 5 Klassen alle zum start des Programmes erzeugen sollte nicht erst wenn ein Benutzer den Tab des TabControls anklickt, denn wenn jedesmal ein usercontrol erzeugt wird beim Tab anklicken hab ich bald einen nullpointer ^^ also beim start des programmes 5 Klassen erzeugen und bei klick auf die tab-buttons einfach sichtbar/unsichtbar machen ODER?
-
selina schrieb:
Wobei ich die 5 Klassen alle zum start des Programmes erzeugen sollte nicht erst wenn ein Benutzer den Tab des TabControls anklickt, denn wenn jedesmal ein usercontrol erzeugt wird beim Tab anklicken hab ich bald einen nullpointer ^^
Wie kannst Du einen Nullptr sehen? Meinst Du dass der GC die Objekte nicht wegräumt? Dann gebe sie doch frei (myPanel ist der Container in dem das user control erscheinen soll, es befindet sich nur dieses Control auf dem Panel):
foreach (Control ctrl in myPanel.Controls) ctrl.Dispose();
Und dann:
myPanel.Controls.Add(myNewUserControl);
Kannst Du doch selber ausprobieren, was besser (perfomanter) ist, wenn Du sie am Anfang erstellst, belegen sie halt alle 5 Speicher. Wenn Du sie erst bei Klicken erzeugst, gehen halt Einstellungsänderungen des Benutzers auf diesen Panel verloren, da es ja neu erzeugt wird.
-
Wenn Du sie erst bei Klicken erzeugst, gehen halt Einstellungsänderungen des Benutzers auf diesen Panel verloren, da es ja neu erzeugt wird.
richtig das meinte ich, wenn ich das Objekt nochmals erzeuge und auf Daten zugreife die nicht vorhanden sind... bekomme ich den Nullptr.
Ok musste meine Anforderungen eh ändern sorry hehe aber ein Tabcontrol reicht mir doch erstmal
da erzeuge ich die Tabs auch am Anfang, was ja auch sinn macht denn auf ein leeres Tab(nicht vorhandenes Tab) kann keiner klicken.