ContextMenuStrip弹出的问题!急~~~
比如我建立了一个TreeView窗口,里边有aa和bb两项,我想在aa或bb上点击右键时弹出右键菜单,点击TreeView控键的空白处时不弹出,
也就是说怎么给TreeView里的项添加ContextMenuStrip右键菜单,就象系统里的任务管理器一样,点击项会出现菜单!谢谢!!
------解决方案--------------------要捕捉mousedown事件,通过GetNodeAt函数获取所在节点
在popup事件里看看有没有当前节点,如果节点为空就不弹出
------解决方案--------------------// Declare the TreeView and ContextMenuStrip
private TreeView menuTreeView;
private ContextMenuStrip docMenu;
public void InitializeMenuTreeView()
{
// Create the TreeView.
menuTreeView = new TreeView();
menuTreeView.Size = new Size(200, 200);
// Create the root node.
TreeNode docNode = new TreeNode( "Documents ");
// Add some additional nodes.
docNode.Nodes.Add( "phoneList.doc ");
docNode.Nodes.Add( "resume.doc ");
// Add the root nodes to the TreeView.
menuTreeView.Nodes.Add(docNode);
// Create the ContextMenuStrip.
docMenu = new ContextMenuStrip();
//Create some menu items.
ToolStripMenuItem openLabel = new ToolStripMenuItem();
openLabel.Text = "Open ";
ToolStripMenuItem deleteLabel = new ToolStripMenuItem();
deleteLabel.Text = "Delete ";
ToolStripMenuItem renameLabel = new ToolStripMenuItem();
renameLabel.Text = "Rename ";
//Add the menu items to the menu.
docMenu.Items.AddRange(new ToolStripMenuItem[]{openLabel,
deleteLabel, renameLabel});
// Set the ContextMenuStrip property to the ContextMenuStrip.
docNode.ContextMenuStrip = docMenu;
// Add the TreeView to the form.
this.Controls.Add(menuTreeView);
}
------解决方案--------------------以下代码调试通过:
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn1 = new TreeNode( "所有 ");
TreeNode aa = new TreeNode( "aa ");
aa.ContextMenuStrip = this.contextMenuStrip1;
TreeNode bb = new TreeNode( "bb ");
bb.ContextMenuStrip = this.contextMenuStrip1;
tn1.Nodes.Add(aa);
tn1.Nodes.Add(bb);
tn1.ExpandAll();
this.treeView1.Nodes.Add(tn1);
}
------解决方案--------------------楼上的注意:
“点击TreeView控键的空白处时不弹出”,你那样子点空白照样会出来菜单
加在右键菜单根本都不需要写代码,直接设计时指定TreeView的contexMenu属性就可以
关键是弹出问题
private void tv_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
tv.SelectedNode = tv.GetNodeAt (e.X ,e.Y );
}
}
private void ccm_Popup(object sender, System.EventArgs e)
{
bool NotNull=(tv.SelectedNode!=null);
具体菜单项的.Visible=NotNull;
}
------解决方案--------------------类似GetNodeAt之类的函数在很多控件中都可以找到
------解决方案--------------------不错,mark
------解决方案--------------------搞定就结贴贝...
让LS几位等.你好意思吗???
哈哈