2011-12-27 9 views

Trả lời

11

Hãy thử:

foreach (TreeNode tn in treeView1.Nodes) { 
    tn.Expand(); 
} 

Khi thêm các nút trong thời gian chạy, bạn chỉ có thể kiểm tra mức độ và mở rộng, nếu cần thiết:

private void ShoudAutoExpand(TreeNode tn) { 
    if (tn.Level == 0) 
    tn.Expand(); 
} 

Không có NodeAdded sự kiện mà bạn có thể móc vào để kiểm tra xem tự động. Bạn sẽ phải tự xác định xem có nên mở rộng nút "theo mặc định" hay không.

Cập nhật:

Từ nhận xét của bạn, nó có vẻ như bạn muốn có tất cả mức 0 nút mở rộng, nhưng sau đó mở rộng tất cả các nút con của cấp 1 khi bạn mở rộng chúng.

Cố gắng đăng ký vào các sự kiện BeforeExpand với mã này:

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { 
    treeView1.BeforeExpand -= treeView1_BeforeExpand; 
    if (e.Node.Level == 1) { 
    e.Node.ExpandAll(); 
    } 
    treeView1.BeforeExpand += treeView1_BeforeExpand; 
} 
+0

phần đầu tiên cho thấy trẻ em cấp đầu tiên như tôi muốn. Nhưng khi tôi bấm vào bất kỳ người trong số họ những đứa trẻ thừa kế không được mở rộng hoàn toàn. – zsharp

+0

@zsharp Đã cập nhật mã. Nghe có vẻ như bạn về cơ bản muốn tất cả các nút mở rộng tự động "ngoại trừ" nút cấp 1. Âm thanh phải không? – LarsTech

+0

thats một, tôi đã cố gắng với onmouseclick đó là lộn xộn. cảm ơn – zsharp

1

bạn có thể thử một cái gì đó như thế này .. bạn sẽ phải thay đổi ví dụ để phù hợp với mã riêng của bạn kể từ khi bạn quên không dán bất kỳ mã mà bạn có hoặc cố gắng

private void addChildNode_Click(object sender, EventArgs e) 
{ 
    var childNode = textBox1.Text.Trim(); 
    if (!string.IsNullOrEmpty(childNode)) { 
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0]; 
    if (parentNode != null) { 
     parentNode.Nodes.Add(childNode); 
     treeView2.ExpandAll(); 
    } 
    } 
} 
1

nếu bạn muốn có một đệ quy, hãy thử này:

void expAll(TreeNode node) 
{ 
    node.Expand(); 
    foreach(TreeNode i in node.Nodes) 
    { 
     expAll(i); 
    } 
} 
1
private TreeNode ExpandUptoLevel(TreeNode tn,int level) 
    { 
     if (level != 0) 
     { 
      level --; 
      tn.Nodes[0].Expand(); 
      return ExpandUptoLevel(tn.FirstNode, level); 
     }        
     return tn; 
    } 
0

Để mở rộng tất cả các nút trong một cây đến mức, mã trên không hoạt động. Chỉ cần thêm một kiểm tra để đọc và so sánh mức nút thực tế với mức mà bạn muốn mở rộng. Đây là đoạn mã.

private void ExpandUptoLevel(TreeNode tn, int level) 
    { 
     if (level >= tn.Level) 
     { 
      tn.Expand(); 
      foreach (TreeNode i in tn.Nodes) 
      { 
       ExpandUptoLevel(i,level); 
      } 
     } 
    } 
+0

Trả lời bài đăng của Ravindra Sinare - không đăng bài ngay lập tức ở trên. –

0

Chỉ để mở nút đầu tiên:

for (int i = 0; i< treeView1.Nodes.Count; i++) 
     { 
      treeView1.Nodes[i].Expand(); 
     } 
+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Ngoài ra, vui lòng không cố gắng gắn mã của bạn với các nhận xét giải thích, điều này làm giảm khả năng đọc của cả mã và giải thích! – kayess