WINFORM TREEVIEW节点选中问题 在TREEVIEW中新建一个节点,接着用右键点击其它节点并在弹出菜单中点击删除,结果删除的不是当前的节点,而是刚新建的节点。原因是因为右键并没有对节点进行选择。所以提问:如何解决让右键也右选中功能。附简单代码即可。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 放在treeView1_AfterSelect事件里,节点不会选错了 private void treeView1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { try { if(e.Button == MouseButtons.Right) { Point ClickPoint = new Point(e.X,e.Y); //////////獲得鼠標坐標 TreeNode ClickNode = treeView1.GetNodeAt(ClickPoint); //////////獲得鼠標坐標的tree節點 if(ClickNode == null) return; Point ScreenPoint = treeView1.PointToScreen(ClickPoint); Point FormPoint = this.PointToClient(ScreenPoint); contextMenu1.MenuItems.Clear(); contextMenu1.MenuItems.Add("新增"); contextMenu1.MenuItems.Add("修改"); contextMenu1.MenuItems.Add("刪除"); contextMenu1.Show(this,FormPoint); ///////////設置菜單得顯示坐標 TreeNode tn =this.treeView1.GetNodeAt(ClickPoint) as TreeNode;///////獲得右擊選中的節點 if(tn!=null) { this.treeView1.SelectedNode = tn;/////////////把選中得節點設為樹選中的節點 } contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托 contextMenu1.MenuItems[1].Click+=new EventHandler(this.treeupd); contextMenu1.MenuItems[2].Click+=new EventHandler(this.treedel); } } catch(Exception ex) { MessageBox.Show(ex.Message); } } //treeView1鼠标按下事件 private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if(e.Button == MouseButtons.Right) { TreeNode tn = treeView1.GetNodeAt(e.X,e.Y); if(tn != null) { this.treeView1.SelectedNode = tn; } } } /// <summary> /// 树的鼠标按下事件 /// </summary> private void treData_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Right) { TreeNode node = this.treData.GetNodeAt(e.X,e.Y); if (node != null) { this.treData.SelectedNode = node; } } } 你在其他节点上点右键时是用的MouseUp事件吗?如果是的话,那么就可以捕捉到当前节点的tag。如果你是在MouseDown里写鼠标右键事件,好象捕捉不到当前选中的节点,因为还没开始选。建议用mouseup事件处理鼠标右键事件。 我采用的 zhzuo(秋枫) 的做法,不过修改了一点。contextMenu1.MenuItems.Add("新增"); contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托这两个合在一起成为一个,这样不容易出错。contextMenu1.MenuItems.Add("新增",new EventHandler(this.treeadd)); Dictionary 排序查找 求助呀!为什么我做的程序无法加载dll文件 网页中背景音乐加在太慢 如何把从数据库中取出的数据放入文本框中显示 【求助】DbCommandBuilder 在单表维护中的使用详解? 关于地铁票价查询系统的问题 新人,,提个抽象类继承的问题 即将参加C#.NET的三个月培训.散分.问一下大家需要预习什么.我有一些基础. 关于mssql2005数据库的问题? 请教:C#中有无函数可加前导‘0’,例如:8 变成 00008 在aspx文件里写后台C#代码时没有提示? 关于C#的问题
{
try
{
if(e.Button == MouseButtons.Right)
{
Point ClickPoint = new Point(e.X,e.Y); //////////獲得鼠標坐標
TreeNode ClickNode = treeView1.GetNodeAt(ClickPoint); //////////獲得鼠標坐標的tree節點
if(ClickNode == null) return;
Point ScreenPoint = treeView1.PointToScreen(ClickPoint);
Point FormPoint = this.PointToClient(ScreenPoint);
contextMenu1.MenuItems.Clear();
contextMenu1.MenuItems.Add("新增");
contextMenu1.MenuItems.Add("修改");
contextMenu1.MenuItems.Add("刪除");
contextMenu1.Show(this,FormPoint); ///////////設置菜單得顯示坐標
TreeNode tn =this.treeView1.GetNodeAt(ClickPoint) as TreeNode;///////獲得右擊選中的節點
if(tn!=null)
{
this.treeView1.SelectedNode = tn;/////////////把選中得節點設為樹選中的節點
}
contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托
contextMenu1.MenuItems[1].Click+=new EventHandler(this.treeupd);
contextMenu1.MenuItems[2].Click+=new EventHandler(this.treedel);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
} }
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Right)
{
TreeNode tn = treeView1.GetNodeAt(e.X,e.Y);
if(tn != null)
{
this.treeView1.SelectedNode = tn;
}
}
}
/// 树的鼠标按下事件
/// </summary>
private void treData_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
TreeNode node = this.treData.GetNodeAt(e.X,e.Y);
if (node != null)
{
this.treData.SelectedNode = node;
}
}
}
如果是的话,那么就可以捕捉到当前节点的tag。
如果你是在MouseDown里写鼠标右键事件,好象捕捉不到当前选中的节点,因为还没开始选。
建议用mouseup事件处理鼠标右键事件。
contextMenu1.MenuItems.Add("新增");
contextMenu1.MenuItems[0].Click+=new EventHandler(this.treeadd);///////向菜單定義委托
这两个合在一起成为一个,这样不容易出错。
contextMenu1.MenuItems.Add("新增",new EventHandler(this.treeadd));