Oppure

Loading
01/07/10 11:31
bury
Salve a tutti,
ho difficoltà a recuperare il valore di un nodo figlio all'interno di un treeview in window form. Con l'evento onclicknode riesco a recuperare solo il nodo padre ma selezionando i figli non riesco a recuperare i valori. Vi sarei molto grato se qualcuno mi aiutasse.

Grazie
aaa
01/07/10 13:08
Il Totem
L'evento NodeMouseClick viene generato quando si fa click su un nodo, indipendetemente dal fatto che esso sia child o parent rispetto a qualche altro nodo. Dovresti mostrare il codice che usi, potrebbe essere scorretto.
aaa
12/07/10 9:53
bury2
Grazie per la risposta il codice che utilizzo è:

if (treeView1.Nodes[e.Node.Index].Tag != null)
{
node5 = treeView1.Nodes[e.Node.Index].Tag.ToString();

if (treeView1.SelectedNode.Parent != null)
{

node5 = treeView1.SelectedNode.Nodes[e.Node.Index].Tag.ToString();
}
prodotto_selezionato_tree = node5.ToString();
label13.Text = prodotto_selezionato_tree.ToString();


}

e ottengo sempre il tag del nodo padre.....apparte che treeView1.SelectedNode.Nodes[e.Node.Index].Tag.ToString() non me lo accetta, ma non sto riuscendo a trovare la sintassi giusta.
aaa
12/07/10 15:18
R0gerBlack
.ToString non c'è sempre in C# come in VB.NET.
Prova a usare qualcosa come al posto di
a.ToString


in


Convert.ToString(a);
:)
aaa
13/07/10 16:05
Il Totem
Postato originariamente da R0gerBlack:

.ToString non c'è sempre in C# come in VB.NET.
Prova a usare qualcosa come al posto di
a.ToString


in


Convert.ToString(a);
:)


ToString è un metodo che deriva dalla classe Object, che è la classe base di ogni tipo dell'architettura .NET. Il fatto che usi queste classe mediante C# o VB.NET non cambia l'essenza delle classi stesse. ToString esiste sempre.


Tu usi e.Node.Index pnesando che e.Node sia sempre un nodo principale, poiché treeView.Nodes restituisce la lista dei nodi di livello 0. Ma e.Node può essere anche un nodo di livello superiore, ossia figlio di un nodo principale. In questo caso e.Node.Index restituisce l'indice che determina quanti figli esistano nel nodo padre prima di e.Node.

In sostanza, e.Node restituisce il nodo cliccato. Tutti i passaggi che fai sono inutili. e.Node è già il nodo che ti serve.
aaa
23/07/10 15:03
bury
Ciao e grazie ancora per la risposta ma proprio non riesco a recuperare valori dei figli:
così recupero il tag sul livello principale
node5 = treeView1.Nodes[e.Node.Index].Tag.ToString();
ma non riesco a fare lo stesso per i figli.


Spero in una tuo aiuto.
Grazie ancora
aaa
25/07/10 7:40
Il Totem
Postato originariamente da bury:

Ciao e grazie ancora per la risposta ma proprio non riesco a recuperare valori dei figli:
così recupero il tag sul livello principale
node5 = treeView1.Nodes[e.Node.Index].Tag.ToString();
ma non riesco a fare lo stesso per i figli.


Spero in una tuo aiuto.
Grazie ancora


No, tu così non ottieni sempre il nodo al livello principale. Se fai click su un nodo, e.Node è il nodo cliccato. Se tale nodo è di livello 0, sei a posto, è un nodo principale. Se è di livello superiore, allora quel codice è logicamente inconcludente.
Infatti, ammettiamo ci siano 4 nodi root, ognuno con 10 figli. Ammettiamo inoltre che l'utente faccia click sul settimo nodo figlio del terzo nodo root. Ora, e.Node.Index è 6, poiché il nodo cliccato è il settimo figlio. Tu cerchi quindi il nodo root di indice 6, che non esiste, perchè i root sono 4.

Per farla semplice, se e.Node.Parent = Nothing, allora e.Node è un nodo root (livello 0). In caso contrario è un nodo figlio, quindi tutti i suoi "fratelli" (ossia i nodi di livello uguale) sono dati da e.Node.Parent.Nodes.
Ultima modifica effettuata da Il Totem 25/07/10 7:41
aaa