2009-05-08 8 views
9

Mam kontroli TreeView w app WinForm i zasadniczo celem jest, aby wyświetlić formularz, który zawiera formant TreeView i chcę, aby wyświetlić formularz z węzła otwarte (łatwe - EnsureVisible) i wybranym.W jaki sposób można programowo kliknąć TreeView TreeNode, aby był podświetlony na liście i uruchamiał zdarzenie AfterSelect?

Problem, na który napotykam, polega na tym, że po ustawieniu właściwości SelectedNode kontrolki TreeView węzeł nie jest podświetlony, a zdarzenie AfterSelect nie jest uruchamiane tak, jak oczekiwałbym. Funkcja AfterSelect jest łatwa do kodowania, ale brak podświetlania jest denerwujący.

Odpowiedz

6

Czy dlatego, że nie ma TreeView ostrość? Czy ustawienie właściwości HideView w TreeView na False zmienia zachowanie, które widzisz?

+0

który z nich odpowiada na nie? są dwie odpowiedzi ... – brumScouse

4

Po ustawieniu SelectedNode. Spróbuj wybrać treeView. Tak czy inaczej pracowałam dla mnie.

private void button1_Click(object sender, EventArgs e) 
{ 
this.treeView1.SelectedNode = this.treeView1.Nodes[1]; 
this.treeView1.Select(); 
} 
+0

this.treeView1.Select() nie wywarł na mnie żadnego efektu. Ustawienie HideSelection na false wprawiło jednak w trik. – Joh

+0

To zadziałało dla mnie. Dziękuję Ci. – beta

0

Podkreślając, jestem przy założeniu, to znaczy, aby tekst pogrubiony. To nie jest tak elegancki jak niektóre inne technologie po stronie klienta, ale można obsłużyć węzeł zostanie zmieniona i sprawiają, że wybrany węzeł pogrubione z czymś

treeNode.Font = new Font(treeNode.Font, treeNode.Font.Style | treeNode.Bold); 
4

Spróbuj to zrobić wybranego węzła Bold:

selectedNode.NodeFont = new System.Drawing.Font(
    selectedNode.TreeView.Font, 
    selectedNode.TreeView.Font.Style | FontStyle.Bold); 

// You need to append an emptry string to work around this bug: 
// http://support.microsoft.com/kb/937215 
selectedNode.Text += string.Empty; 
0

Dobra zadałem pytanie wkrótce. znalazł rozwiązanie:

//clear background 
RadTreeNodeCollection nodes = rtrvNetworkAll.Nodes; 
foreach (RadTreeNode n in nodes) 
{ 
     this.ClearRecursive(n); 
} 
//search a node with the build in find function 
foreach (RadTreeNode n in nodes) 
{ 
     this.FindRecursive(n); 
} 

// recursively move through the treeview nodes 
private void FindRecursive(RadTreeNode treeNode) 
{ 
     foreach (RadTreeNode tn in treeNode.Nodes) 
     { 
       // if the text properties match, color the item 
       if (tn.Text == this.txtSearch.Text) 
       { 
        tn.BackColor = Color.Yellow; 
       } 
       FindRecursive(tn); 
     } 
} 

private void ClearRecursive(RadTreeNode treeNode) 
{ 
     foreach (RadTreeNode tn in treeNode.Nodes) 
     { 
       tn.BackColor = Color.White; 
       ClearRecursive(tn); 
     } 
}  
0

Dla mnie problemem było to, że kontrola TreeView nie muszą mieć ostrość, a zatem wybrany węzeł nie pokazywał się jako podświetlone. Poniższy kod pracował dla mnie:

treeView.Focus(); 
treeView.SelectedNode = myTreeNode; 

wpadłem dokładnie tej kwestii podczas realizacji niektórych funkcji przeciągnij i upuść dla kontroli TreeView.