2009-05-08 2 views
9

Tôi có một điều khiển TreeView trong một ứng dụng Winforms, và về cơ bản mục tiêu là hiển thị một biểu mẫu có chứa một điều khiển TreeView, và tôi muốn hiển thị biểu mẫu với một nút được mở (dễ - EnsureVisible) và được chọn.Làm thế nào tôi có thể lập trình nhấp vào TreeView TreeNode để nó xuất hiện được tô sáng trong danh sách và kích hoạt sự kiện AfterSelect?

Sự cố mà tôi đang gặp phải là khi tôi đặt thuộc tính SelectedNode của kiểm soát TreeView, nút không được đánh dấu và sự kiện AfterSelect không kích hoạt như tôi mong đợi. Các điều AfterSelect là dễ dàng để mã xung quanh, nhưng thiếu làm nổi bật là gây phiền nhiễu.

Trả lời

6

Có phải vì TreeView không tập trung? Không thiết lập thuộc tính HideSelection của TreeView thành False thay đổi hành vi bạn đang thấy?

+0

cái nào là oh trả lời? có hai câu trả lời ... – brumScouse

4

Sau khi bạn thiết lập SelectedNode. Hãy thử chọn treeView. Làm việc cho tôi anyway.

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

this.treeView1.Select() không có hiệu lực đối với tôi. Tuy nhiên, việc đặt HideSelection thành false đã thực hiện thủ thuật. – Joh

+0

Điều này làm việc cho tôi. Cảm ơn bạn. – beta

0

Bằng cách làm nổi bật, tôi giả sử bạn muốn làm cho văn bản in đậm. Nó không phải là thanh lịch như một số các công nghệ phía khách hàng khác, nhưng bạn có thể xử lý các nút được thay đổi và làm cho các nút lựa chọn táo bạo với một cái gì đó giống như

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

Hãy thử này để làm cho nút chọn in đậm:

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

Được rồi tôi đã hỏi câu hỏi này một chút để sớm tôi đoán. Tìm thấy một giải pháp:

//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

Đối với tôi vấn đề này là các TreeView kiểm soát không nhất thiết phải tập trung và do đó nút chọn không hiển thị như sáng lên. Mã sau đây đã hoạt động cho tôi:

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

Tôi gặp sự cố chính xác này khi thực hiện một số chức năng kéo và thả cho điều khiển TreeView.