Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Selezionare tag da un nodo figlio in un treeview
Forum - C# / VB.NET - Selezionare tag da un nodo figlio in un treeview

Avatar
bury (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/07/2010

Segnala al moderatore
Postato alle 13:31
Giovedì, 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

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:08
Giovedì, 01/07/2010
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.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
bury2 (Normal User)
Newbie


Messaggi: 1
Iscritto: 12/07/2010

Segnala al moderatore
Postato alle 11:53
Lunedì, 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.

PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 17:18
Lunedì, 12/07/2010
.ToString non c'è sempre in C# come in VB.NET.
Prova a usare qualcosa come al posto di
Codice sorgente - presumibilmente Plain Text

  1. a.ToString



in


Codice sorgente - presumibilmente Plain Text

  1. Convert.ToString(a);

:)


Volere è potere.

Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:05
Martedì, 13/07/2010
Testo quotato

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

  1. a.ToString



in


Codice sorgente - presumibilmente Plain Text

  1. 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.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
bury (Normal User)
Newbie


Messaggi: 2
Iscritto: 01/07/2010

Segnala al moderatore
Postato alle 17:03
Venerdì, 23/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

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:40
Domenica, 25/07/2010
Testo quotato

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


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote