做开发的时候,遇到了这样一个问题:
想在树形结构上实现一个功能,就是在树形的一个节点上右键单击,弹出一个下拉菜单,有添加子节点等菜单项,点击后可以有添加子菜单项的界面,不知道能不能实现?
我用的是.net2005,语言是c#,谢谢大家。

解决方案 »

  1.   

    在事件里面有一个右键点击事件  叫什么Convertstrip...的 忘了 你可以看看
      

  2.   

    是完全可以实现的   我曾用JBulid 写过一个类似的程序 如果你在写的时候遇到问题  可以找我   部分代码共享给你
    我是小菜鸟!   说的不好清见谅,   希望能够帮到你!
      

  3.   

    树节点有一个CONTEXTMENU的属性,可以添加快捷菜单。
    获取选中的节点就可以在该节点下添加子节点,及保存子节点
    treeview.selectNode.nodes.add(newnode)
    如果要保存到数据库,哪就要看你数据库子段怎么设计了,可以设计成BOM表类型。
      

  4.   

    例如可以这么设计
    ID   NODENAME 
    001   002
    001   003
    002   004
    002   005
    004   006001-              
       |-----002
       |-----003
    ///////////////////
    001-
       |----002
       |     |-004
       |     |-005
       |
       |----003
       |----004
             |-006
      

  5.   


    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; 
        } 

      

  6.   

    我做的是web程序,能贴出一个web用的代码借鉴一下吗?
      

  7.   

    WEB程序要用javascript右键菜单来操作.
    网上有的你找一下右键代码,
    然后根据你所点击的节点或空白项来控制传入处理的Id号或者节点号