Wie erstellt man Kopien von Instanzen?
-
Ich habe ein Panel mit dem Designer erstellt und möchte mehrere Kopien dieses Panels erstellen. Nach dem es keinen Kopierkonstruktor und auch keine andere Methode gibt, die das für mich macht, habe ich mir gedacht, dass ich die Panelklasse ableite und einen Kontruktor implementiere, der als Parameter ein Handle auf ein Panel besitzt und die notwendigenen Attribute dann einzeln kopiert.
Somit habe ich eine flache Kopie der Instanz erstellt, was mir bis auf eine Ausnahme reicht.
Ich will für die Kopien des Panels eine neue ControlCollection für panel->Controls einsetzten, damit ich andere Steuerelemente einsetzten kann. Leider bietet panels->Controls keine set Methode, d.h. ich kann die Eigenschaft nicht austauschen.
Muß ich jetzt bei der Ableitung die ICloneable Schnittstelle benutzten und MemberwiseClone() implementieren für eine tiefe Kopie, damit eine neue ControlCollection eingesetzt werden kann?
-
Die Methode der ICloneable Schnittstelle heißt natürlich Clone() und nicht MemberwiseClone().
-
Wozu das Panel kopieren wenn du eh andere Controls einfügen willst?!?
Panels kann man wie andere Controls auch, aus dem gleichen Grund nicht clonen warum man Controls auch nicht serialisieren kann - es macht keinen Sinn. Controls besitzen jeweils ein WindowHandle, und das ist eineindeutig, wenn du es clonst würde es zwei Controls mit dem gleichen Handle geben, und das ist einfach nicht erlaubt unter Windows.
Die Möglichkeit mit ableiten und eigenen Konstruktor und manuell kopieren ist ne Möglichkeit, wenn auch wie oben schon gesagt, ich halte sie nicht für sinnvoll.
-
Ich möchte nicht einen Clon mit dem gleichen Handle sondern mit einem neuen Handle. Das neue Handle soll die gleichen Objekt-Eigenschaften wie das alte Handle haben, z.B. Größe und Ort des Panels, das mit dem Designer festgelegt wurde. Ich möchte allerdings andere Steuerelemente drin haben, wenn zwischen verschiedenen Visualisierungen umgeschaltet wird.
-
Panel.Controls.Add(UserControl_1)
oder
Panel.Controls.Add(UserControl_2)
oder
Panel.Controls.Add(UserControl_3)Unter Controls werden nicht nur 'einfache' Ctrls verstanden, es können auch zusammengesetzte sein. Das heißt man macht ein HauptCtrl z.B UserControl und innerhalb dessen sind dann die weiteren Ctrls. Dann hast du zwar mehrere Klassen, kannst die Events aber auch besser trennen. Also, ein Panel und einem variierendem UserControl.
Vielleicht hilft's