none
treeview bug??? RRS feed

  • 问题

  •  vs2005
    treeview 双击事件 中的e 在节点展开的时候得到是展开节点的 第一个子节点
    bug???显示明明还是在父节点上!
    vc815
    2010年1月20日 9:45

答案

  • 我这里按照周雪峰 MVP 的 Repro Steps 也能够重现。

    我个人认为可能是 Bug,TreeView 总是通过当前鼠标位置获取节点信息 (GetNodeAt(int, int)),因此当 TreeView 出现垂直滚动条时就会出现上述问题 (垂直滚动条出现时,TreeView 会自动将最后的一个节点 ScrollIntoView)。

    建议您到 Connect 站点 (connect.microsoft.com) 去 File 一个 Bug,我们跟着 Follow up 和 Vote。
    Mark Zhou
    2010年1月25日 10:42
  • 几乎可以肯定,这的确是一个bug,你可以按mazhou的建议,到connect.microsoft.com把这个问题上报给微软!
    周雪峰
    2010年1月25日 10:48
    版主

全部回复

  • 不会哦,你是不是搞错了? 或者自己写了事件响应函数,没有处理正确?
    2010年1月20日 10:36
  • 不一定是 bug。您说的这个问题在我这里的 Visual Studio 2008 + .NET Framework 2.0, 3.0, 3.5 以及 Visual Studio 2010 + .NET Framework 4.0 均无法重现。

    能不能提供重现步骤以便我可以调查?


    Mark Zhou
    2010年1月20日 10:43
  • 你好!
         请问你使用的是哪个事件,事件处理程序是如何编写的?
    周雪峰
    2010年1月20日 12:39
    版主
  • 不一定是 bug。您说的这个问题在我这里的 Visual Studio 2008 + .NET Framework 2.0, 3.0, 3.5 以及 Visual Studio 2010 + .NET Framework 4.0 均无法重现。

    能不能提供重现步骤以便我可以调查?


    Mark Zhou

    多个选项卡中放置treeview 都绑定到一个NodeMouseDoubleClick事件
    我检测了 没看到那里有异常(程序)
    vc815
    2010年1月25日 6:04
  • 你好!
         请问你使用的是哪个事件,事件处理程序是如何编写的?
    周雪峰

    NodeMouseDoubleClick
    里面通过e 判断
    vc815
    2010年1月25日 6:05
  • 你好!
         这里的确有些问题,你双击节点的时候,可能子节点要展开,那通过e.Node获取的就是节点展开以后鼠标指针悬停的位置的节点,有时刚好是第一个子节点,所以造成了你的错觉!
         这个问题不止是VS2005中存在,VS2008中也同样存在!
    周雪峰
    2010年1月25日 7:32
    版主
  • 我个人猜测原因是这样的:
    你的鼠标第二次鼠标按下之后,这个双击事件就触发了,然后子节点都展开,然后可能会移动位置,这时鼠标可能在其他节点的上面了,然后鼠标抬起,这时把那个鼠标之下的节点识别成选中节点了!
    周雪峰
    2010年1月25日 7:53
    版主
  • 我这里好像没有问题。哪一位能够 Repro?
    Mark Zhou
    2010年1月25日 9:50
  • mazhou,你好!
         我这里重现了,用VS2005和VS2008都可以重现这个问题,重现步骤如下:
         1,新建一个windows应用程序项目
         2,把一个TreeView控件拖到窗体设计器上,然后添加根节点0,然后添加子节点1,2,3,在添加另外一个根节点4,然后添加子节点5,6,7,8
              再添加根节点9,添加子节点10,11,12,13
         3,订阅TreeView的NodeMouseDoubleClick事件,事件处理程序如下:
             private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                MessageBox.Show(e.Node.Text);
            }
         4,双击节点9,MessageBox显示的是节点10或其他的节点,具体根据展开这个节点后treeView自动滚动的位置而不同!
             
         实际上展开节点后,treeView如果发生了自动滚动,造成treeView中节点的位置发生改变,就可以重现这个问题了!
        
    周雪峰
    2010年1月25日 10:24
    版主
  • 我试试看。等会再答复。
    Mark Zhou
    2010年1月25日 10:33
  • 我这里按照周雪峰 MVP 的 Repro Steps 也能够重现。

    我个人认为可能是 Bug,TreeView 总是通过当前鼠标位置获取节点信息 (GetNodeAt(int, int)),因此当 TreeView 出现垂直滚动条时就会出现上述问题 (垂直滚动条出现时,TreeView 会自动将最后的一个节点 ScrollIntoView)。

    建议您到 Connect 站点 (connect.microsoft.com) 去 File 一个 Bug,我们跟着 Follow up 和 Vote。
    Mark Zhou
    2010年1月25日 10:42
  • 几乎可以肯定,这的确是一个bug,你可以按mazhou的建议,到connect.microsoft.com把这个问题上报给微软!
    周雪峰
    2010年1月25日 10:48
    版主
  • 知道导致这个原因就行
    我已经找到替代方案

    感谢支持!


    vc815
    2010年1月26日 2:14