Jakiego typu jest "Nodes" w klasie TreeNode?

0

Tworze klasę na wzor treeView tylko bez implementacji graficznej, i zastanawiam się, jakiego typu jest kolekcja NODES. W swojej klasie użyłem listy "List", ale widzę, że ikonka jest inna, więc kieruje pytanie do specjalistów.

pzdr

*edit: prev: http:*4programmers.net/Forum/viewtopic.php?id=140712

0

Od, dzięki. Ale wciąz zastanawiam się czemu jest rozbiezność w ikonkach w Intelisense:

user image

patrz 1 vs 3

okno 3 zawiera rozwinieta liste elementow ListView.
pzdr

Ale jeszcze jedno.
W klasie TreeView możemy operować metodami na wlaściwości Nodes:
np. Nodes.Add(string text);

jak zaimplementować w kodzie operacje na właściwościach?
Np napisac metode Add dla klasy operujacej na tablicy typu TreeNodeCollection.
Prosilbym o przyklad.
Dzieki.

0

Buee =(
TreeNodeCollection to kolekcja TreeNode'ów, po co Ci ich tablica? I to samo w sobie ma metodę Add()

0

Ok, a poza tym chciałem dopisać swoje metody operujace na kolekcji nodes, np jak pojawienie sie msgboxa z info po skasowaniu pozycji z kolekcji. Czy moge zrobic overrida metody albo jakos inaczej zaimplementowac te zdzarzenia?

Utworzylem TreeViewa, i w runtimie chce zrobic takie cudo

treeView1.Nodes = tl.Nodes;

lecz

Error	1	Property or indexer 'System.Windows.Forms.TreeView.Nodes' cannot be assigned to -- it is read only	C:\Documents and Settings\Jacek\Moje dokumenty\Visual Studio 2008\Projects\WindowsFormsApplication3\WindowsFormsApplication3\Form1.cs	31	9	WindowsFormsApplication3

Nie da sie asygnowac kolekcji Nodes z treeViewa podczas runtime forma?

0

Skoro jest tylko do odczytu, to jest i tego nie zmienisz.

Nie możesz działać na tym, jak na każdej normalnej kolekcji?

treeView1.Nodes.Clear();
treeView1.Nodes.AddRange(t1.Nodes);
somekind napisał(a)

Skoro jest tylko do odczytu, to jest i tego nie zmienisz.

Nie możesz działać na tym, jak na każdej normalnej kolekcji?

treeView1.Nodes.Clear();
treeView1.Nodes.AddRange(t1.Nodes);

Error 2 Argument '1': cannot convert from 'System.Windows.Forms.TreeNodeCollection' to 'System.Windows.Forms.TreeNode[]' C:\Documents and Settings\Jacek\Moje dokumenty\Visual Studio 2008\Projects\WindowsFormsApplication3\WindowsFormsApplication3\Form1.cs 31 34 WindowsFormsApplication3

dla

treeView1.Nodes.AddRange(t1.Nodes);

0

oraz:

 public class NTreeNode : TreeNode
    {
        private string onCheckName;
        private string fullName;
        private string price;

        public string OnCheckName
        {
            get { return onCheckName; }
            set { onCheckName = value; }
        }

        public string FullName
        {
            get { return fullName; }
            set { fullName = value; }
        }

        public string Price
        {
            get { return price; }
            set { price = value; }
        }
    }

    public class TreeList
    {
        private int mainNodesCount = 0;
        private TreeNodeCollection nodes;
        public TreeNodeCollection Nodes
        {
            set{nodes = value;}
            get { return nodes; }
        }
    } 
public partial class Form1 : Form
    {
        private NTreeNode node;
        public TreeList tl = new TreeList();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e){}

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){}

        private void bCreatePosition_Click(object sender, EventArgs e)
        {
            node = new NTreeNode();
            node.FullName = textBox1.Text;
            node.OnCheckName = textBox2.Text;
            node.Price = textBox3.Text;

            tl.Nodes.Add(node);
        }
    }

Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

dla

tl.Nodes.Add(node);

0
el vis napisał(a)

Error 2 Argument '1': cannot convert from 'System.Windows.Forms.TreeNodeCollection' to 'System.Windows.Forms.TreeNode[]' C:\Documents and Settings\Jacek\Moje dokumenty\Visual Studio 2008\Projects\WindowsFormsApplication3\WindowsFormsApplication3\Form1.cs 31 34 WindowsFormsApplication3

dla

treeView1.Nodes.AddRange(t1.Nodes);

To może tak?

foreach(TreeNode n in t1.Nodes)
    treeView1.Nodes.Add(n);

A tak w ogóle... http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.nodes.aspx

Drugi problem...
Z tego, co widzę, to nie inicjalizujesz nigdzie kolekcji Nodes dla t1. Powinieneś robić to np. w konstruktorze klasy TreeList.

public class TreeList
{
    private int mainNodesCount = 0;
    private TreeNodeCollection nodes;
    public TreeNodeCollection Nodes
    {
        set { nodes = value; }
        get { return nodes; }
    }
    public TreeList()
    {
        this.nodes = new TreeNodeCollection();
    }
}

</ort>
0
somekind napisał(a)

Drugi problem...
Z tego, co widzę, to nie inicjalizujesz nigdzie kolekcji Nodes dla t1. Powinieneś robić to np. w konstruktorze klasy TreeList.

public class TreeList
{
    private int mainNodesCount = 0;
    private TreeNodeCollection nodes;
    public TreeNodeCollection Nodes
    {
        set { nodes = value; }
        get { return nodes; }
    }
    public TreeList()
    {
        this.nodes = new TreeNodeCollection();
    }
}

</ort>

Próbowałem,

Error 2 The type 'System.Windows.Forms.TreeNodeCollection' has no constructors defined C:\Documents and Settings\Jacek\Moje dokumenty\Visual Studio 2008\Projects\WindowsFormsApplication3\WindowsFormsApplication3\TreeList.cs 47 26 WindowsFormsApplication3

0

Widocznie tak jest.
Możliwe, że TreeNodeCollection służy tylko i wyłącznie do reprezentowania węzłów w TreeView.

0
somekind napisał(a)

Widocznie tak jest.
Możliwe, że TreeNodeCollection służy tylko i wyłącznie do reprezentowania węzłów w TreeView.

Ale w takim razie w jakis sposób ta kolekcja musi byc obsluzona przez TreeViiew.
Niestety nie umiem podejzeć bibliotek.

0

Po prostu jej konstruktor ma modyfikator internal, tj. może być wykonany tylko w tym samym assembly (System.Windows.Forms). poza tym cała klasa wiąże się z konkretnym TreeView.
Stwórz własną klasę. Chociaż i same List<T> wystarczy.

0

a z Ciekawości, da sie skopiować wszystkie elementy klasy TreeView i lekko ją urozmaicic?;p

0

W pewnym sensie. Możesz utworzyć kontrolkę dziedziczącą po TreeView i ponadpisywać jej metody wirtualne.

0

elvis: moglbys sie zarejestrowac/zdecydowac jakiego nicka uzywasz? jeszce troche i zaczne je kasowac zamiast przerabiac na wlasciwy nick..

tu jest poprzedni (mini)watek: http://4programmers.net/Forum/viewtopic.php?id=140712

mozesz tak w skrocie wyjasnic co Ty wlasciwie kombinujesz i po co probujesz napisac wlasnego TreeView od zera?

1 użytkowników online, w tym zalogowanych: 0, gości: 1