如何在treeview上设定右键菜单

qq_35417357 2019-04-11 09:11:54
在treeview上设定右键菜单,只有在节点上才能显示,且要求不同节点可以绑定不同的ContextMenuStrip
...全文
610 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
楠楠小可爱 2019-05-20
  • 打赏
  • 举报
回复
引用 6 楼 caozhy的回复:
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 Q392565471
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
treeView1.ContextMenu.Show(treeView1, e.Location);
}
}

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
var node = treeView1.HitTest(e.X, e.Y);
treeView1.SelectedNode = node.Node;
if (node.Node == null)
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("添加节点", new EventHandler((x, y) => MessageBox.Show("添加节点")));
}
else
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("打开 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("选择了 " + node.Node.Text)));
treeView1.ContextMenu.MenuItems.Add("删除 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("是否删除 " + node.Node.Text)));
}
}
}
}


刚刚说错了,节点右键菜单每一项的图标怎么添加呀
楠楠小可爱 2019-05-20
  • 打赏
  • 举报
回复
引用 6 楼 caozhy的回复:
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 Q392565471
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
treeView1.ContextMenu.Show(treeView1, e.Location);
}
}

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
var node = treeView1.HitTest(e.X, e.Y);
treeView1.SelectedNode = node.Node;
if (node.Node == null)
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("添加节点", new EventHandler((x, y) => MessageBox.Show("添加节点")));
}
else
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("打开 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("选择了 " + node.Node.Text)));
treeView1.ContextMenu.MenuItems.Add("删除 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("是否删除 " + node.Node.Text)));
}
}
}
}


请问节点右键菜单每一项的节点怎么添加呀
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
[quote=引用 8 楼 智者知已应修善业 的回复:]
也就是说只要建立多个快捷,用条件判断加载就是了,没看出有何区别。


lz主要是问这个
var node = treeView1.HitTest(e.X, e.Y);
treeView1.SelectedNode = node.Node;
if (node.Node == null)
在这里判断,如果是在空白的地方点的,那么node.Node == null(VB的写法是node.Node Is Nothing)
那么就取消菜单即可[/quote]
或许你说得对!

或许可能要的是

树状.Nodes.Add("节点3").ContextMenuStrip = 快捷

threenewbee 2019-04-13
  • 打赏
  • 举报
回复
引用 8 楼 智者知已应修善业 的回复:
也就是说只要建立多个快捷,用条件判断加载就是了,没看出有何区别。
lz主要是问这个 var node = treeView1.HitTest(e.X, e.Y); treeView1.SelectedNode = node.Node; if (node.Node == null) 在这里判断,如果是在空白的地方点的,那么node.Node == null(VB的写法是node.Node Is Nothing) 那么就取消菜单即可
  • 打赏
  • 举报
回复
也就是说只要建立多个快捷,用条件判断加载就是了,没看出有何区别。
qq_35417357 2019-04-13
  • 打赏
  • 举报
回复
引用 3 楼 智者知已应修善业 的回复:

        快捷 = New ContextMenuStrip
        树状 = New TreeView

        快捷.Items.Add("快捷1")
        快捷.Items.Add("快捷2")
        快捷.Items.Add("快捷3")

        树状.ContextMenuStrip = 快捷
        树状.Nodes.Add("节点1")
        树状.Nodes.Add("节点2")
        树状.Nodes.Add("节点3")
这个好像只要在treeview控件上就可以用右键,我需要的是在只有是点击树上才能用,其他区域不能用
  • 打赏
  • 举报
回复
与楼上的有什么不同?都可以实现想要的功能。
threenewbee 2019-04-13
  • 打赏
  • 举报
回复
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 Q392565471
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
treeView1.ContextMenu.Show(treeView1, e.Location);
}
}

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
var node = treeView1.HitTest(e.X, e.Y);
treeView1.SelectedNode = node.Node;
if (node.Node == null)
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("添加节点", new EventHandler((x, y) => MessageBox.Show("添加节点")));
}
else
{
treeView1.ContextMenu = new ContextMenu();
treeView1.ContextMenu.MenuItems.Add("打开 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("选择了 " + node.Node.Text)));
treeView1.ContextMenu.MenuItems.Add("删除 " + node.Node.Text, new EventHandler((x, y) => MessageBox.Show("是否删除 " + node.Node.Text)));
}
}
}
}


  • 打赏
  • 举报
回复
那么高端等后面来人给答案。
  • 打赏
  • 举报
回复


快捷 = New ContextMenuStrip
树状 = New TreeView

快捷.Items.Add("快捷1")
快捷.Items.Add("快捷2")
快捷.Items.Add("快捷3")

树状.ContextMenuStrip = 快捷
树状.Nodes.Add("节点1")
树状.Nodes.Add("节点2")
树状.Nodes.Add("节点3")
  • 打赏
  • 举报
回复

Dim 树状 As TreeView
Dim 快捷 As ContextMenuStrip
快捷 = New ContextMenuStrip
快捷.Items.Add("111")
快捷.Items.Add("222")
快捷.Items.Add("333")
树状 = New TreeView
树状.Parent = Me
树状.ContextMenuStrip = 快捷

  • 打赏
  • 举报
回复

TreeView 分类树 = new TreeView();
ContextMenuStrip 快捷 = new ContextMenuStrip();
分类树.ContextMenuStrip = 快捷;

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧