TREEVIEW节点的双击事件问题?

mattli79 2004-12-29 09:45:57
TREEVIEW的每个节点的双击事件怎么触发呀?不是整个TREEVIEW的事件!效果就是和QQ的一样,双击一个节点 弹出一窗口?
我的做法是在整个树的DOUBLECLICK事件中判断选中节点,但是这个做法有缺点,就是我选中一节点后,双击其他的空白地方也是会触发这个节点的双击事件。
各位大侠,有什么好办法没有? 右键的事件也是一样。
...全文
648 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
js981dz 2004-12-30
  • 打赏
  • 举报
回复
一样,一样。
lengfeng8866 2004-12-30
  • 打赏
  • 举报
回复
只会学,不会答,水平有限啊。。。
mattli79 2004-12-30
  • 打赏
  • 举报
回复
谢谢xavier(尼日利亚),你的方法解决了我的问题。但还有一个问题:点右键的时候,第一次点弹出了右键菜单,如果不选择任何菜单项,再去右键另一个节点,就不会再弹出右键菜单了,只是上一次的菜单消失,再点一下才能再弹出来!
请问这个问题怎么解决?
分不够可再加。
mattli79 2004-12-30
  • 打赏
  • 举报
回复
up
xavier 2004-12-29
  • 打赏
  • 举报
回复
关注一下!帮顶
mattli79 2004-12-29
  • 打赏
  • 举报
回复
up
mattli79 2004-12-29
  • 打赏
  • 举报
回复
现在每个节点右侧的空白部分也算是节点的一部分,怎样才能让只有节点的文字部分当作节点?
Tsingwawa 2004-12-29
  • 打赏
  • 举报
回复
我也认为xavier的答复应该是可以的,关键在两个步骤:
1、根据鼠标位置得到当前活动节点。当然这一步得到的仍然可能在意料之外,因为TreeNode右边的空白位置算作它的区域。

2、判断鼠标的位置是否真的在节点上。可以乡xavier那样引入一个成员变量来记录鼠标按下去或者弹起来的位置;也可以动态的抓取鼠标当前的绝对位置,然后使用TreeView控件的PointToClient方法换算成空间内部的相对位置,来看是否在节点范围内部。
xavier 2004-12-29
  • 打赏
  • 举报
回复
忘记改c#了,-_-!
private Point pi;

private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
pi=new Point(e.X,e.Y);
}

private void treeView1_DoubleClick(object sender, System.EventArgs e)
{
TreeNode node=this.treeView1.GetNodeAt(pi);
if(pi.X<node.Bounds.Left || pi.X>node.Bounds.Right)
{
this.Text="" ; //不触发事件
return;
}
else
{
this.Text="ggg"; //触发事件
}
}
xavier 2004-12-29
  • 打赏
  • 举报
回复
多给点分吧,搞了一下午。
private pi as point

Private Sub tv_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tv.MouseDown
pi = New Point(e.X, e.Y)
End Sub

Private Sub tv_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tv.DoubleClick
Dim node As TreeNode = tv.GetNodeAt(pi)
If pi.X < node.Bounds.Left Or pi.X > node.Bounds.Right Then
Me.Text = "" '不触发事件
Exit Sub
Else
Me.Text = "ggg" ‘触发事件
End If

End Sub
The_Gathering 2004-12-29
  • 打赏
  • 举报
回复
得到光标所在的位置之后
应该可以通过
TreeView.GetChildAtPoint
得到光标对应的节点
olison 2004-12-29
  • 打赏
  • 举报
回复
如果你的节点是有规律的,,可以写一个if判断你所点的节点长度,如果大于此长度则不执行事件
mattli79 2004-12-29
  • 打赏
  • 举报
回复
upup

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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