TREE VIEW

giovedì 18 gennaio 2007 - 09.42

MATTEHGT Profilo | Junior Member

Sapete indicarmi il codice per deselezionare un nodo figlio una volta selezionato un altro nodo figlio della stessa radice?

Grazie

Matteo Agrizzi

AntCiar Profilo | Expert

Ciao.

Mi sembra che il controllo treeview lo faccia in automatico.
nel caso a te non si comporti così, descrivi meglio la cosa (magari allegando un piccolo scrrenshot).

Ciao

MATTEHGT Profilo | Junior Member

il mio problema è: se seleziono un nodo figlio ad esempio nomenclature combinate e se poi seleziono il nodo successivo o precedente automaticamente la selezione e il check si deve impostare su quello correntemente selezionato escludendo quindi il precedente

Grazie

AntCiar Profilo | Expert

Ciao.

Con l'immagine la cosa è più chiara. In primo luogo a me verrebbe di fare in questo modo:

sull'evento afterselect del nodo (per capirci quello che ti genera quando fai doppio click in fase di progettazione sul controllo) controllorei se ne tag della treeview vi sia memorizzato qualche oggetto. Se vi è, effettuerei il cast dell'oggetto verso un tipo TreeNode e gli imposterei la proprietà checked a false. Successivamente inposterei a true la proprietà checked del nono selezionato (e.node) e successivamente attribuirei al tag della treeview il nodo correntemente selzionato. Questo farà si che potrai impostare il check solo su un nodo della tree.

Spero di essere stato di aiuto.

MATTEHGT Profilo | Junior Member

Avevo provato così:
Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck


SetTreeNodeCheck(DirectCast(sender, TreeView).Nodes, e.Node, False)


End Sub

Public Sub SetTreeNodeCheck(ByVal nodes As TreeNodeCollection, ByVal escludeTreeNode As TreeNode, ByVal state As Boolean)

For Each n As TreeNode In nodes

SetTreeNodeCheck(n.Nodes, escludeTreeNode, state)

If Not n.Equals(escludeTreeNode) AndAlso Not n.Checked = state Then
n.Checked = state
End If

Next

End sub

Il problema è che questo codice necessita di due click: uno per deselezionare il nodo precedente, l'altro per selezionare quello corrente. La mia necessità era di eseguire tutto con un solo clic
Mi era stato anche fornito questo suggerimento

Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck

static last_node_selected as treenode = nothing

if not last_node_selected is nothing then _
last_node_selected.Checked = false

e.Node.Checked = true

last_node_selected = e.Node

End Sub


Il problema è che termina con una ricorsione infinita

Saluti

Grazie

Matteo Agrizzi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5