【问题标题】:How to make a child node visible = false in a Treeview Control如何在 Treeview 控件中使子节点可见 = false
【发布时间】:2011-06-06 14:06:21
【问题描述】:

我有一个带有树视图控件的 Windows 窗体。此树视图有一个 Root 节点和 2 个子节点。我的要求是我需要隐藏第一个子节点。 有没有可能让那个特定的孩子点头可见是假的

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    是的,您可以从树节点继承并创建自己的行为。像这样。

    public class RootNode : TreeNode
    {
        public List<ChildNode> ChildNodes { get; set; }
    
        public RootNode()
        {
            ChildNodes = new List<ChildNode>();
        }
    
        public void PopulateChildren()
        {
            this.Nodes.Clear();
    
            var visibleNodes = 
                ChildNodes
                .Where(x => x.Visible)
                .ToArray();
    
            this.Nodes.AddRange(visibleNodes);
        }
    
        //you would use this instead of (Nodes.Add)
        public void AddNode(ChildNode node)
        {
            if (!ChildNodes.Contains(node))
            {
                node.ParentNode = this;
                ChildNodes.Add(node);
                PopulateChildren();
            }
        }
    
        //you would use this instead of (Nodes.Remove)
        public void RemoveNode(ChildNode node)
        {
            if (ChildNodes.Contains(node))
            {
                node.ParentNode = null;
                ChildNodes.Remove(node);
                PopulateChildren();
            }
    
        }
    }
    
    public class ChildNode : TreeNode
    {
        public RootNode ParentNode { get; set; }
        private bool visible;
        public bool Visible { get { return visible; } set { visible = value;OnVisibleChanged(): } }
        private void OnVisibleChanged()
        {
            if (ParentNode != null)
            {
                ParentNode.PopulateChildren();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      不,没有办法使节点不可见。您应该删除它而不是使其不可见。稍后您必须将其添加回原来的位置。

      【讨论】:

        【解决方案3】:

        如果您使用站点地图文件加载树视图,那么另一种方法是执行类似的操作。此处用户的凭据已从数据库中读取并写入 cookie。

            private void ManageTreeMenu()
            {
                var value = Utilities.Cookies.GetCookieValue("IsAdmin");
                bool.TryParse(value, out var isAdmin);
        
                var dir = Server.MapPath("~");
                File.Delete(dir + "Web.sitemap");
                if (isAdmin)
                    File.Copy(dir + "WebAdmin.sitemap", dir + "/Web.sitemap");
        
                else
                    File.Copy(dir + "WebOper.sitemap", dir + "/Web.sitemap");
            }
        

        如果用户在程序中的角色发生了变化,您必须再次执行此操作。我只在 Visual Studio 中验证了这一点,而不是在已部署的 Web 应用程序中。警告购买者。

        【讨论】:

          猜你喜欢
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多