Entwickler-Ecke
WinForms - TreeView bzw. TreeNodes kopieren - klonen - referenzieren?
Christoph1972 - Di 16.06.09 18:36
Titel: TreeView bzw. TreeNodes kopieren - klonen - referenzieren?
Hallo zusammen,
ich habe mal wieder eine Frage. Und zwar möchte ich ein TreeView bzw. dessen Nodes kopieren oder klonen. Mein erster Versuch war eine Referenz auf das TreeView Control zu legen, also
newTreeView = oldTreeView, aber dann fehlen die Nodes. Eine weiter Versuch sieht so aus:
Die Basis Klasse:
C#-Quelltext
1: 2: 3:
| TreeNode[] tnc = new TreeNode[myTreeView.Nodes.Count]; myTreeView.Nodes.CopyTo(tnc, 0); andereKLasse.SetMainTreeView = tnc; |
die andere Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public TreeNode[] SetMainTreeView { set { subTreeView.Nodes.AddRange(value); } } |
Die Exeption:
Das Element XYZ kann nur an einer Stelle hinzugefügt oder eingefügt werden. Entfernen Sie es von der aktuellen Position, oder klonen Sie es.
Wie kann das sein? Das TreeView besitzt zu dem Zeitpunkt keine Nodes. Ich denke dass hier meinerseits ein Missverständnis vorliegt. Hat hier jemand einen Tipp für mich, wie vorgehen muss, um eine Kopie eines TreeViews mit allen Nodes und Icons zu erhalten. Ich denke, das kann man dann auch leicht für andere Controls verwenden, oder?
Vielen Dank schon mal!
Gruß
Christoph
JüTho - Di 16.06.09 19:13
Hallo Christoph,
ich sehe nichts davon, dass du wirklich Clone verwendest. Hast du dir das Beispiel in der
SDK-Doku/MSDN unter
TreeNode.Clone-Methode genau angeschaut?
Zitat: |
Wie kann das sein? Das TreeView besitzt zu dem Zeitpunkt keine Nodes. Ich denke dass hier meinerseits ein Missverständnis vorliegt. |
Weil es sich um Referenzen handelt, kann offensichtlich ein ganz konkreter TreeNode nur an eine Stelle in einer TreeView existieren und nicht an mehreren Stellen. Das gleiche gilt übrigens auch für jedes einzelne Control.
Zitat: |
Hat hier jemand einen Tipp für mich, wie vorgehen muss, um eine Kopie eines TreeViews mit allen Nodes und Icons zu erhalten. |
Siehe das o.g. Beispiel.
Zitat: |
Ich denke, das kann man dann auch leicht für andere Controls verwenden, oder? |
Nein. Es geht nur bei den Elementen, die das Interface
IClonable implementiert haben. Welche das sind, findest du z.B. in der SDK-Doku über den Index zur Clone-Methode.
Gruß Jürgen
Kha - Di 16.06.09 19:54
Um was geht es denn, um die Kommunikation zweier Forms? Dann gilt das alte Prinzip: Nicht die Controls, sondern die zugrunde liegenden Daten solltest übergeben.
Christoph1972 - Di 16.06.09 21:44
Hi,
vielen Dank für die schnellen Antworten!
@JüTho
Die Klone Methode hatte ich mir angeschaut. Ich war aber der Meinung, dass ich alle Nodes mit einem Klone übergeben kann. Es gibt auch noch eine TreeNodeCollection damit habe ich es aber auch nicht hinbekommen. Ich werde mir morgen mal die Klone Methode anschauen.
@Kha
Ich benötige in einem Projekt das gleiche TreeView, in zwei verschieden Forms. Ich möchte es nur vermeiden das TreeView in dem zweiten Form zu befüllen. Ich bin der Meinung das eine Kopie des ersten TreeViews reicht, ich bin ja faul :P
Gruß
Christoph
Christoph1972 - Di 16.06.09 21:57
Habe mir gerade die Klone Methode angeschaut. Eine "Lösung" habe ich jetzt, jedoch werden die Icons nicht mit übergeben.
Nemag - Mi 17.06.09 14:21
Servus
jetzt mal ohne das ich mir die Treeview nochmal genauer angeschaut habe
wenn du die Treeview auf eine andere Form kopieren willst - ist dann auf dieser dann die ImageList der anderen Form auch bekannt? Denke du übergibst ja nur Indizes der ImageList - vielleicht fehlt deshalb das Icon.
Christoph1972 - Mi 17.06.09 18:01
So, nun werden alle Nodes nach und nach geklont und dann in eine List<TreeNode> befördert. Die List<> übergebe ich an die andere Klasse. Der Klasse habe ich eine identische ImageList verpasst und nun funktioniert alles so wie gewünscht. Ich dachte hat das es mit einem „Einzeiler“ gehen würde, na ja dann eben nicht :lol:
Vielen Dank an euch!
Gruß
Christoph
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!