如何在Treeview控件中使子节点不可见?

5

我有一个带有树形视图控件的Windows表单。这个树形视图有一个根节点和2个子节点。我的需求是需要隐藏第一个子节点。是否可以将该特定子节点的可见性设置为false?

3个回答

6

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

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();
        }
    }
}

1

不,没有办法使节点不可见。您应该删除它而不是让它不可见。然后,您需要将其添加回原始位置。


0
如果你正在使用站点地图文件加载一个树形视图,那么另一个方法是像这样做。在这里,用户的凭据已经从数据库中读取并写入了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应用程序中验证。买方自负。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接