Autor Beitrag
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 16.06.09 18:36 
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:
ausblenden C#-Quelltext
1:
2:
3:
TreeNode[] tnc = new TreeNode[myTreeView.Nodes.Count];
myTreeView.Nodes.CopyTo(tnc, 0);
andereKLasse.SetMainTreeView = tnc; // Übergabe an eine andere Klasse


die andere Klasse:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public TreeNode[] SetMainTreeView
{
 set
    {
     subTreeView.Nodes.AddRange(value); // hier gibts dann eine Exeption             
    }
}


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: 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