有一个文件菜单和TreeView。
现在我想实现的功能就是:
当鼠标右键点击TreeView中的节点时,
将文件菜单中的所有Items添加到右键菜单中,但是文件菜单中的item是根据选择的节点的不同有的就会置灰显示。
如何实现,请各位大虾发表一下自己的看法,谢谢

解决方案 »

  1.   

    contextMenuStrip 是右键菜单。把个菜单新建好。并和treeview的 contextMenuStrip属性绑定好。就可以了
      

  2.   

    至于不同的节点出现不同的右键菜单。则需要在treeview 的选中事件写代码。动态修改contextMenuStrip 的菜单.
      

  3.   

    用一个ContextMenuStrip控件,然后在treeview控件的ContextMenuStrip属性里选择刚才的菜单控件,然后在treeview控件的各个节点添加时间就可以实现了
      

  4.   

    因为我的文件菜单已经是写好的,事件什么的都写好了。
    我只想在右键菜单中添加文件菜单中的item,这样我就不用再写右键菜单中的事件代码了?
    有什么方法吗?谢谢
      

  5.   

    如果将文件菜单中的item添加到contextMenuStrip中的话,文件菜单中的item就会消失,不知道是为什么?
      

  6.   


    你在给右键菜单item事件函数中,直接调用和该item对应的那个文件菜单的事件不就行了么。
      

  7.   


           private void openToolStripMenuItem1_Click(object sender, EventArgs e)
            {
                this.openFileDialog1.Filter = "文本(*.txt)|*.txt|所有文件(*.*)|*.*";
                this.openFileDialog1.ShowDialog();
                
            }           private void openToolStripMenuItem_Click(object sender, EventArgs e)
            {
                openToolStripMenuItem1_Click(sender, e);
            }给你个例子
      

  8.   

    lz试试看看下面vb下实现的代码Public Class Form1    '添加节点用于测试
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            For i As Integer = 0 To 10
                Dim n As New TreeNode("Node" + i.ToString)
                For j As Integer = 0 To 5
                    Dim nn As New TreeNode("SubNode" + j.ToString)
                    n.Nodes.Add(nn)
                Next
                Me.TreeView1.Nodes.Add(n)
            Next
        End Sub    '改变菜单状态
        Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
            Dim l As Integer = Me.TreeView1.SelectedNode.Level
            If l = 0 Then
                Me.OpenToolStripMenuItem.Enabled = True
                Me.SaveToolStripMenuItem.Enabled = True
                Me.ExitToolStripMenuItem.Enabled = True
            ElseIf l = 1 Then
                Me.OpenToolStripMenuItem.Enabled = False
                Me.SaveToolStripMenuItem.Enabled = False
                Me.ExitToolStripMenuItem.Enabled = True
            End If
        End Sub    'Handles 后面(文件菜单的三个子项)需要自己写代码进行事件绑定
        Private Sub OpenMenuItemClick(ByVal sender As Object, ByVal e As EventArgs) Handles OpenToolStripMenuItem.Click, SaveToolStripMenuItem.Click, ExitToolStripMenuItem.Click
            Dim str As String = CType(sender, ToolStripMenuItem).Text        Select Case str
                Case "exit"
                    Me.Close()
                Case Else
                    MsgBox(str)
            End Select
        End Sub    '重新生成右键菜单
        Private Sub TreeView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TreeView1.MouseDown
            If e.Button = Windows.Forms.MouseButtons.Right Then
                Dim m As New ContextMenuStrip            For Each item As ToolStripMenuItem In Me.FileToolStripMenuItem.DropDownItems
                    m.Items.Add(item.Text, Nothing, AddressOf OpenMenuItemClick).Enabled = item.Enabled
                Next
                Me.TreeView1.ContextMenuStrip = m
            End If
        End SubEnd Class
      

  9.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                for (int i = 0; i <= 10; i++)
                {
                    TreeNode n = new TreeNode("Node" + i.ToString());
                    for (int j = 0; j <= 5; j++)
                    {
                        TreeNode nn = new TreeNode("SubNode" + j.ToString());
                        n.Nodes.Add(nn);
                    }
                    this.TreeView1.Nodes.Add(n);
                }         }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                int l = this.TreeView1.SelectedNode.Level;
                if (l == 0)
                {
                    this.OpenToolStripMenuItem.Enabled = true;
                    this.SaveToolStripMenuItem.Enabled = true;
                    this.ExitToolStripMenuItem.Enabled = true;
                }
                else if (l == 1)
                {
                    this.OpenToolStripMenuItem.Enabled = false;
                    this.SaveToolStripMenuItem.Enabled = false;
                    this.ExitToolStripMenuItem.Enabled = true;
                }         }        private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons .Right )
                {
                    ContextMenuStrip m = new ContextMenuStrip();                foreach (ToolStripMenuItem item in this.FileToolStripMenuItem.DropDownItems)
                    {
                        m.Items.Add(item.Text, null, OpenMenuItemClick).Enabled = item.Enabled;
                    }
                    this.TreeView1.ContextMenuStrip = m;
                }         }        private void  OpenMenuItemClick(object sender, EventArgs e) 
            { 
                string str = ((ToolStripMenuItem)sender).Text; 
            
                switch (str) { 
                    case "exit": 
                        this.Close(); 
                        break; 
                    default: 
                        MessageBox .Show (str); 
                        break; 
                } 
            } 
        }
    }
    以上是对于的C#代码,不知道能不能Copy后直接运行。
    lz试试看吧
      

  10.   

    其实这个问题.. 换个角度就相当简单
    你把两边都填满 控制其是否可见就得了
    例如 某个contextMenuStrip 种的 item 的 visible =true;至于那个tree 它的Node 中好像有一个属性叫 NodeFont 改变它的字体应该可行
      

  11.   

    谢谢Andygogogo、wzuomin、cancerser的建议,其实你们的方法都是可以实现的。
    我原来想的是不要添加任何代码,只要将文件菜单中的item添加到右键菜单中就可以实现了。
    看来是不行的。
    呵呵,谢谢大家,散分散分