有一个文件菜单和TreeView。
现在我想实现的功能就是:
当鼠标右键点击TreeView中的节点时,
将文件菜单中的所有Items添加到右键菜单中,但是文件菜单中的item是根据选择的节点的不同有的就会置灰显示。
如何实现,请各位大虾发表一下自己的看法,谢谢
现在我想实现的功能就是:
当鼠标右键点击TreeView中的节点时,
将文件菜单中的所有Items添加到右键菜单中,但是文件菜单中的item是根据选择的节点的不同有的就会置灰显示。
如何实现,请各位大虾发表一下自己的看法,谢谢
我只想在右键菜单中添加文件菜单中的item,这样我就不用再写右键菜单中的事件代码了?
有什么方法吗?谢谢
你在给右键菜单item事件函数中,直接调用和该item对应的那个文件菜单的事件不就行了么。
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);
}给你个例子
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
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试试看吧
你把两边都填满 控制其是否可见就得了
例如 某个contextMenuStrip 种的 item 的 visible =true;至于那个tree 它的Node 中好像有一个属性叫 NodeFont 改变它的字体应该可行
我原来想的是不要添加任何代码,只要将文件菜单中的item添加到右键菜单中就可以实现了。
看来是不行的。
呵呵,谢谢大家,散分散分