以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  当树的结点较多时,在树上双击时,当前结点会乱跑?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=7783)

--  作者:cpayinyuan
--  发布时间:2010/8/5 12:41:00
--  当树的结点较多时,在树上双击时,当前结点会乱跑?

   如题,当窗口中 的 树的某节点的子节点较多时,在节点上双击,当前节点会自己变化,不知怎么回事?

   如事例(开发版的),表A的窗口1,树的事件代码很简单,在某节点上双击时,提示框显示出当前节点的名称(e.Node.name),在其他节点上双击能正常显示,但当双击“河南”时(这个节点的子节点较多),显示的节点名称乱七八糟,莫名其妙!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:树结点乱跑的事例.rar


--  作者:狐狸爸爸
--  发布时间:2010/8/5 12:46:00
--  
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
MessageBox.Show(trv.SelectedNode.Text)

--  作者:cpayinyuan
--  发布时间:2010/8/5 12:50:00
--  

贺老师怎么没有回答我事例中的问题?帮助中的内容如下:

 

NodeMouseDoubleClick

用鼠标双击节点后执行。

e参数属性

Form:    触发事件的窗口
Sender:  触发事件的目录树
Node:    双击的节点

 

 

我用e.Node获得双击的节点,难道不对吗?


--  作者:狐狸爸爸
--  发布时间:2010/8/5 15:00:00
--  

帮助没有错的,你也没有错。

这个问题是.net framework的bug,只能想办法绕开它。


--  作者:cpayinyuan
--  发布时间:2010/8/13 14:24:00
--  
以下是引用狐狸爸爸在2010-8-5 12:46:00的发言:
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
MessageBox.Show(trv.SelectedNode.Text)

       经认真测试,如果树的层次结构比较复杂,尤其是同时展开的节点(子节点)较多时,用SelectedNode同样不能正常使用!我的项目中的设计是,当在某节点上双击时,把选择的当前节点作为条件在表中筛选或查询,现在无论用e.Node.Text还是用e.Sender.SelectedNode.Text,在前述情况下都不能正常筛选或查询!

    这么一个小问题,难道没有办法了??????


--  作者:狐狸爸爸
--  发布时间:2010/8/13 15:42:00
--  

用单击吧


--  作者:cpayinyuan
--  发布时间:2010/8/13 16:28:00
--  
以下是引用狐狸爸爸在2010-8-13 15:42:00的发言:

用单击吧

大部分同类的软件都是用双击,所以用单击不符合用户的习惯。

 

希望贺老师再想想办法啊!


--  作者:cpayinyuan
--  发布时间:2010/8/14 11:27:00
--  
以下是引用cpayinyuan在2010-8-13 16:28:00的发言:

大部分同类的软件都是用双击,所以用单击不符合用户的习惯。

 

希望贺老师再想想办法啊!


--  作者:狐狸爸爸
--  发布时间:2010/8/14 11:39:00
--  

我没有办法的。

 

.net的bug很多,有的我可以想办法绕过去,有的我也束手无策,我也就是个二道贩子而已,很多东西我无法决定。

 

你可以在单击事件中用一个Static变量记录上次单击的时间,如果时间间隔小于0.5秒(间隔自己决定),就执行动作,来人为地模拟双击:

 

Static lt As Date

If (Date.Now-lt).TotalSeconds < 0.5 Then

   执行代码

End If

lt = Date.Now()

 

 


--  作者:cpayinyuan
--  发布时间:2010/8/14 12:10:00
--  
以下是引用狐狸爸爸在2010-8-14 11:39:00的发言:

我没有办法的。

 

.net的bug很多,有的我可以想办法绕过去,有的我也束手无策,我也就是个二道贩子而已,很多东西我无法决定。

 

你可以在单击事件中用一个Static变量记录上次单击的时间,如果时间间隔小于0.5秒(间隔自己决定),就执行动作,来人为地模拟双击:

 

Static lt As Date

If (Date.Now-lt).TotalSeconds < 0.5 Then

   执行代码

End If

lt = Date.Now()

 

 

谢谢,我试试!

 

另外,我不太明白,是 .net2.0有这个bug,还是任何版本都有?难道微软发现了bug就不再改进吗?

[此贴子已经被作者于2010-8-14 12:38:20编辑过]