Public Class Form1 Dim menu As ContextMenuStrip Dim tree As TreeView Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load tree = New TreeView AddHandler tree.MouseDown, AddressOf TreeMouseDown For i As Integer = 0 To 10 Dim n As New TreeNode("Node" + i.ToString) For j As Integer = 0 To 5 n.Nodes.Add("SubNode" + j.ToString) Next tree.Nodes.Add(n) Next tree.Dock = DockStyle.Fill Me.Controls.Add(tree) menu = New ContextMenuStrip menu.Items.Add("展开", Nothing, AddressOf ItemClick) menu.Items.Add("新建", Nothing, AddressOf ItemClick) menu.Items.Add("添加子节点", Nothing, AddressOf ItemClick) tree.ContextMenuStrip = menu End Sub Private Sub ItemClick(ByVal sender As Object, ByVal e As System.EventArgs) Select Case CType(sender, ToolStripMenuItem).Text Case "展开" tree.SelectedNode.Expand() Case "折叠" tree.SelectedNode.Collapse() Case "添加子节点" Dim frm As New AddSubNodeForm If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then tree.SelectedNode.Nodes.Add(frm.NodeText) End If End Select End Sub Private Sub TreeMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Dim n As TreeNode = tree.SelectedNode If n IsNot Nothing Then If n.Nodes.Count > 0 Then menu.Items(0).Enabled = True If n.IsExpanded Then menu.Items(0).Text = "折叠" Else menu.Items(0).Text = "展开" End If Else menu.Items(0).Enabled = False End If End If End SubEnd ClassPublic Class AddSubNodeForm Inherits System.Windows.Forms.Form Private WithEvents btnOk As New Button Private WithEvents btnCancel As New Button Private WithEvents txtNodetext As New TextBox Public NodeText As String = "ChildNode" Private Sub AddSubNodeForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load btnOk.Text = "确定" btnCancel.Text = "取消" txtNodetext.Text = NodeText Me.Controls.AddRange(New Control() {btnOk, btnCancel, txtNodetext}) txtNodetext.SetBounds(10, 10, 200, 30) btnOk.SetBounds(10, 50, 50, 20) btnCancel.SetBounds(80, 50, 50, 20) End Sub Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click Me.DialogResult = Windows.Forms.DialogResult.OK End Sub Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.DialogResult = Windows.Forms.DialogResult.Cancel End Sub End Classpublic class Form1 {
ContextMenuStrip menu; TreeView tree;
private void Form1_Load(object sender, System.EventArgs e) { tree = new TreeView(); tree.MouseDown += TreeMouseDown; for (int i = 0; i <= 10; i++) { TreeNode n = new TreeNode("Node" + i.ToString); for (int j = 0; j <= 5; j++) { n.Nodes.Add("SubNode" + j.ToString); } tree.Nodes.Add(n); } tree.Dock = DockStyle.Fill; this.Controls.Add(tree);
menu = new ContextMenuStrip(); menu.Items.Add("展开", null, ItemClick); menu.Items.Add("新建", null, ItemClick); menu.Items.Add("添加子节点", null, ItemClick);
tree.ContextMenuStrip = menu; }
private void ItemClick(object sender, System.EventArgs e) { switch (((ToolStripMenuItem)sender).Text) { case "展开": tree.SelectedNode.Expand(); break; case "折叠": tree.SelectedNode.Collapse(); break; case "添加子节点": AddSubNodeForm frm = new AddSubNodeForm(); if (frm.ShowDialog() == Windows.Forms.DialogResult.OK) { tree.SelectedNode.Nodes.Add(frm.NodeText); } break; } }
我是小菜鸟! 说的不好清见谅, 希望能够帮到你!
获取选中的节点就可以在该节点下添加子节点,及保存子节点
treeview.selectNode.nodes.add(newnode)
如果要保存到数据库,哪就要看你数据库子段怎么设计了,可以设计成BOM表类型。
ID NODENAME
001 002
001 003
002 004
002 005
004 006001-
|-----002
|-----003
///////////////////
001-
|----002
| |-004
| |-005
|
|----003
|----004
|-006
Public Class Form1 Dim menu As ContextMenuStrip
Dim tree As TreeView Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tree = New TreeView
AddHandler tree.MouseDown, AddressOf TreeMouseDown
For i As Integer = 0 To 10
Dim n As New TreeNode("Node" + i.ToString)
For j As Integer = 0 To 5
n.Nodes.Add("SubNode" + j.ToString)
Next
tree.Nodes.Add(n)
Next
tree.Dock = DockStyle.Fill
Me.Controls.Add(tree) menu = New ContextMenuStrip
menu.Items.Add("展开", Nothing, AddressOf ItemClick)
menu.Items.Add("新建", Nothing, AddressOf ItemClick)
menu.Items.Add("添加子节点", Nothing, AddressOf ItemClick) tree.ContextMenuStrip = menu
End Sub Private Sub ItemClick(ByVal sender As Object, ByVal e As System.EventArgs)
Select Case CType(sender, ToolStripMenuItem).Text
Case "展开"
tree.SelectedNode.Expand()
Case "折叠"
tree.SelectedNode.Collapse()
Case "添加子节点"
Dim frm As New AddSubNodeForm
If frm.ShowDialog() = Windows.Forms.DialogResult.OK Then
tree.SelectedNode.Nodes.Add(frm.NodeText)
End If
End Select
End Sub Private Sub TreeMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Dim n As TreeNode = tree.SelectedNode
If n IsNot Nothing Then
If n.Nodes.Count > 0 Then
menu.Items(0).Enabled = True
If n.IsExpanded Then
menu.Items(0).Text = "折叠"
Else
menu.Items(0).Text = "展开"
End If
Else
menu.Items(0).Enabled = False
End If
End If
End SubEnd ClassPublic Class AddSubNodeForm
Inherits System.Windows.Forms.Form Private WithEvents btnOk As New Button
Private WithEvents btnCancel As New Button
Private WithEvents txtNodetext As New TextBox Public NodeText As String = "ChildNode" Private Sub AddSubNodeForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
btnOk.Text = "确定"
btnCancel.Text = "取消"
txtNodetext.Text = NodeText
Me.Controls.AddRange(New Control() {btnOk, btnCancel, txtNodetext})
txtNodetext.SetBounds(10, 10, 200, 30)
btnOk.SetBounds(10, 50, 50, 20)
btnCancel.SetBounds(80, 50, 50, 20)
End Sub Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
End Classpublic class Form1
{
ContextMenuStrip menu;
TreeView tree;
private void Form1_Load(object sender, System.EventArgs e)
{
tree = new TreeView();
tree.MouseDown += TreeMouseDown;
for (int i = 0; i <= 10; i++) {
TreeNode n = new TreeNode("Node" + i.ToString);
for (int j = 0; j <= 5; j++) {
n.Nodes.Add("SubNode" + j.ToString);
}
tree.Nodes.Add(n);
}
tree.Dock = DockStyle.Fill;
this.Controls.Add(tree);
menu = new ContextMenuStrip();
menu.Items.Add("展开", null, ItemClick);
menu.Items.Add("新建", null, ItemClick);
menu.Items.Add("添加子节点", null, ItemClick);
tree.ContextMenuStrip = menu;
}
private void ItemClick(object sender, System.EventArgs e)
{
switch (((ToolStripMenuItem)sender).Text) {
case "展开":
tree.SelectedNode.Expand();
break;
case "折叠":
tree.SelectedNode.Collapse();
break;
case "添加子节点":
AddSubNodeForm frm = new AddSubNodeForm();
if (frm.ShowDialog() == Windows.Forms.DialogResult.OK) {
tree.SelectedNode.Nodes.Add(frm.NodeText);
} break;
}
}
private void TreeMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeNode n = tree.SelectedNode;
if (n != null) {
if (n.Nodes.Count > 0) {
menu.Items(0).Enabled = true;
if (n.IsExpanded) {
menu.Items(0).Text = "折叠";
}
else {
menu.Items(0).Text = "展开";
}
}
else {
menu.Items(0).Enabled = false;
}
}
}
} public class AddSubNodeForm : System.Windows.Forms.Form
{
private Button btnOk = new Button();
private Button btnCancel = new Button();
private TextBox txtNodetext = new TextBox();
public string NodeText = "ChildNode";
private void AddSubNodeForm_Load(object sender, System.EventArgs e)
{
btnOk.Text = "确定";
btnCancel.Text = "取消";
txtNodetext.Text = NodeText;
this.Controls.AddRange(new Control[] {btnOk, btnCancel, txtNodetext});
txtNodetext.SetBounds(10, 10, 200, 30);
btnOk.SetBounds(10, 50, 50, 20);
btnCancel.SetBounds(80, 50, 50, 20);
}
private void btnOk_Click(object sender, System.EventArgs e)
{
this.DialogResult = Windows.Forms.DialogResult.OK;
}
private void btnCancel_Click(object sender, System.EventArgs e)
{
this.DialogResult = Windows.Forms.DialogResult.Cancel;
}
}
网上有的你找一下右键代码,
然后根据你所点击的节点或空白项来控制传入处理的Id号或者节点号