【问题标题】:attach a panel to TreeView control将面板附加到 TreeView 控件
【发布时间】:2012-10-26 16:56:30
【问题描述】:

我是 C# 的初学者。在我的项目中,我在 TreeView 控件中填充了一个 xml 文件。如果 xml 文件很大,TreeView 控件将显示带有滚动条的数据。除此之外,每当用户双击一个节点时,我都会在所选节点旁边显示一个面板,如下所示..

当我滚动 TreeView 控件时

我的问题是如何使panel 附加到treeView 控件,以便即使用户滚动TreeView 控件,面板也应该与所选节点一起移动。

【问题讨论】:

  • 这是html应用还是winforms应用?
  • WinForms..对不起,我总是忘记保留标签
  • 如何在选定节点前面显示该面板??
  • 我认为这没有必要,因为它与问题无关,这是代码:myPanel.SetBounds(myTreeView.SelectedNode.Bounds.X + 50, myTreeView.SelectedNode.Bounds.Y, myPanel.Width, myPanel.Height);

标签: c# winforms treeview panel


【解决方案1】:

嗯,很难做到,因为 TreeView 没有 Scroll 事件。无论如何它都不可靠,因为节点可以展开和折叠,从而改变节点的位置和可见性。备份计划是使用计时器。这很好用:

    private void timer1_Tick(object sender, EventArgs e) {
        var node = treeView1.SelectedNode;
        if (node == null || !node.IsVisible) panel1.Visible = false;
        else {
            panel1.Visible = true;
            var nodepos = treeView1.PointToScreen(node.Bounds.Location);
            var panelpos = panel1.Parent.PointToClient(nodepos);
            panel1.Top = panelpos.Y;
        }
    }

【讨论】:

  • 我正要发布这个链接,sourceforge.net/projects/treeviewadv。但这应该可以在没有任何复杂性的情况下完成工作。
  • 不幸的是它不起作用。我按原样粘贴了您的代码..我应该对其进行任何更改吗? (不是控件名,我也加了定时器控件)
  • 这是经过测试的代码。您是否忘记启用计时器?你订阅了 Tick 事件吗?您是否更改了控件名称?
猜你喜欢
  • 2012-10-04
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多