bury (Normal User)
Newbie
Messaggi: 2
Iscritto: 01/07/2010
|
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
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|
bury2 (Normal User)
Newbie
Messaggi: 1
Iscritto: 12/07/2010
|
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.
|
|
R0gerBlack (Member)
Expert
Messaggi: 210
Iscritto: 10/06/2010
|
.ToString non c'è sempre in C# come in VB.NET.
Prova a usare qualcosa come al posto di
Codice sorgente - presumibilmente Plain Text |
in
Codice sorgente - presumibilmente Plain Text |
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da R0gerBlack:
.ToString non c'è sempre in C# come in VB.NET.
Prova a usare qualcosa come al posto di
Codice sorgente - presumibilmente Plain Text |
in
Codice sorgente - presumibilmente Plain Text |
|
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. |
|
bury (Normal User)
Newbie
Messaggi: 2
Iscritto: 01/07/2010
|
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
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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 il 25/07/2010 alle 9:41 |
|