如何在Treeview控件中使子节点可见= false

时间:2011-06-06 14:06:21

标签: c# winforms treeview

我正在使用带有树视图控件的窗体。此树视图具有Root节点和2个子节点。我的要求是我需要隐藏第一个子节点。 是否有可能使特定的孩子明显错误点头

3 个答案:

答案 0 :(得分:3)

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

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 :(得分:1)

不,没有办法让节点不可见。你应该删除它而不是隐形。之后你将不得不将它添加回原来的位置。

答案 2 :(得分: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应用程序中没有验证过。买者自负。