2013-05-11 53 views
5

Tôi đang làm việc trên một dự án VB.NET 2010 có tính năng kiểm soát treeview. Điều đầu tiên tôi đang cố gắng tìm ra là làm thế nào để chèn một nút mới ngay sau nút hiện được chọn, và sau đó thực hiện nút vừa được chèn vào đó, nút được chọn là. Tôi có thể chèn nút mới không có vấn đề, nhưng tôi không thể tìm ra cách để làm cho nó nút "đã chọn". Dòng nhận xét dưới đây là phần tôi bị treo lên.VB.NET TreeView - tự động chọn một nút sau khi đã được chèn hoặc di chuyển?

Private Sub AddNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddNode.Click 

    If Not treeview1.SelectedNode Is Nothing Then 
     treeview1.Nodes.Insert(treeview1.SelectedNode.Index + 1, TextBox1.Text) 
     treeview.SelectedNode = treeview1.Nodes.Item(treeview1.SelectedNode.Index + 1) ' <-- I thought this would work, but it doesn't 
    End If 

End Sub 

Thứ hai, tôi đang sử dụng mã bên dưới để di chuyển nút đã chọn (liên quan đến các nút khác). Điều đó hoạt động tốt, nhưng tương tự như vấn đề ở trên, tôi không thể tìm ra cách giữ nút đó như nút "đã chọn" sau khi nó đã được di chuyển.

Private Sub NodeUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NodeUp.Click 

    Dim CurrentIndex As Integer = treeview1.SelectedNode.Index 
    Dim CurrentNode As TreeNode = treeview1.SelectedNode 
    treeview1.SelectedNode.Remove() 
    treeview1.Nodes.Insert(CurrentIndex - 1, CurrentNode) 

End Sub 

Điều này phải đơn giản, nhưng tôi đang cố gắng tìm ra cách, vì vậy tôi sẽ đánh giá cao một chút thông tin chi tiết tại đây.

Cảm ơn!

Trả lời

4

Để đặt nút đã chọn trong số TreeView bạn gọi TreeView.SelectedNode thành TreeNode bạn muốn chọn.

Bây giờ chúng ta đã thiết lập rằng, xuống ví dụ của bạn:

Khi bạn gọi TreeView.Nodes.Insert sử dụng quá tải bạn có (integer, string) bạn thực sự có được một đối tượng TreeNode trả lại cho bạn. Vì vậy, nếu bạn thay đổi mẫu của mình thành

Private Sub AddNode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddNode.Click 

    If Not treeview1.SelectedNode Is Nothing Then 
     Dim NewNode as TreeNode = treeview1.Nodes.Insert(treeview1.SelectedNode.Index + 1, TextBox1.Text) 
     treeview.SelectedNode = NewNode 
    End If 

End Sub 

thì nó sẽ chọn nút bạn vừa tạo.

ví dụ thứ hai của bạn chỉ cần có một dòng được thêm vào nó:

Private Sub NodeUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NodeUp.Click 

    Dim CurrentIndex As Integer = treeview1.SelectedNode.Index 
    Dim CurrentNode As TreeNode = treeview1.SelectedNode 
    treeview1.SelectedNode.Remove() 
    treeview1.Nodes.Insert(CurrentIndex - 1, CurrentNode) 
    treeview1.SelectedNode = CurrentNode 

End Sub 

này là tất cả làm việc kể từ trình biên dịch não vào lúc này là tôi không có quyền truy cập vào Visual Studio để thử nghiệm nó, vì vậy xin vui lòng Hãy cho tôi biết nếu bạn có bất kỳ vấn đề.

+0

Cảm ơn Adrian, cả hai giải pháp đều hoạt động hoàn hảo! :) Tôi cảm thấy ngớ ngẩn bây giờ sau khi nhìn thấy câu trả lời cho ví dụ thứ 2 của tôi ... chính "doh!" khoảnh khắc, lol. – NotQuiteThereYet

+0

@NotQuiteThereYet Không có vấn đề gì: D Đây là cách chúng ta học - chúng ta mắc lỗi và thấy chúng ta đã đi sai ở đâu. Tin tôi đi, tôi đã mắc sai lầm sillier hơn trước đây. – Adrian