简体   繁体   English

如何将文件名设置为已添加但未删除的Treeview节点

[英]How to set file name to a added and not removed treeview node

At the beginning, I add my parent and child nodes to a tree view, with button click event: 首先,我将父节点和子节点添加到树视图中,并带有按钮单击事件:

private void button1_Click(object sender, EventArgs e)
        {

            treeView1.Nodes.Add("chapter1"); 
            treeView1.Nodes.Add("chapter2"); 
            treeView1.Nodes.Add("chapter3");

        treeView1.Nodes[0].Nodes.Add("sec1");
        treeView1.Nodes[0].Nodes.Add("sec2");
        treeView1.Nodes[0].Nodes.Add("sec3");

        treeView1.Nodes[1].Nodes.Add("sec1");
        treeView1.Nodes[1].Nodes.Add("sec2");
        treeView1.Nodes[1].Nodes.Add("sec3");

        treeView1.Nodes[2].Nodes.Add("sec1");
        treeView1.Nodes[2].Nodes.Add("sec2");
        treeView1.Nodes[2].Nodes.Add("sec3");
}

Later I create a remove button click event: 稍后,我创建一个删除按钮单击事件:

private void button2_Click(object sender, EventArgs e)
        {
            RemoveChecked(treeView1.Nodes);
        }

        void RemoveChecked(TreeNodeCollection nodes)
        {
            foreach (TreeNode checkedNode in FindCheckedNodes(nodes))
            {
                nodes.Remove(checkedNode);
            }
        }


        private List<TreeNode> FindCheckedNodes(TreeNodeCollection nodes)
        {
            List<TreeNode> checkedNodes = new List<TreeNode>();
            foreach (TreeNode node in nodes)
            {
                if (node.Checked)
                {
                    checkedNodes.Add(node);
                }
                else
                {
                    // find checked childs        
                    checkedNodes.AddRange(FindCheckedNodes(node.Nodes));
                }
            }
            return checkedNodes;

}

Now, I want to generate everything what is added and not removed to a file. 现在,我想生成添加到文件中而不删除的所有内容。 I am working with latex files, so I need to write just \\include . 我正在使用乳胶文件,因此我只需要编写\\ include即可。 So I use header and footer files and between them final - where I should get both together and add my generated options. 因此,我使用页眉和页脚文件,以及它们之间的最终文件-在这里我应该将它们放在一起并添加生成的选项。 So I am thinking of 3 button click event, for example: 因此,我想到了3按钮单击事件,例如:

private void button3_Click(object sender, EventArgs e)
        {
             var header = File.ReadAllText(@"C:\dir\header.tex");
            var footer = File.ReadAllText(@"C:\dir\footer.tex");
            var sb = new StringBuilder();
            sb.AppendLine(header);
            // if node added and not removed with chapter1 text , sb.Appendline("\include {chapter1})

            sb.AppendLine(footer);
            File.WriteAllText(@"C: \dir\final.tex", sb.ToString());
        }

Maybe you can offer me how to make work my part which is commented? 也许您可以向我提供如何使我的作品得到评论?

Thanks. 谢谢。

The TreeNode has a Tag property which you can use to pin any object to it, so, pinned is the path, which is later used to write the final block. TreeNode具有Tag属性,您可以使用该属性将任何对象固定到其上,因此,固定的是路径,该路径随后用于写入最终块。

Also refactored the tree view node appending part. 还重构了树视图节点的附加部分。

This should work: 这应该工作:

private TreeNode Append(TreeNode parent, string text)
{
    TreeNode newNode;
    if (parent != null)
    {
        newNode = parent.Nodes.Add(text);
        newNode.Tag = parent.Tag + "\\{" + text + "}";
    }
    else
    {
        newNode = treeView1.Nodes.Add(text);
        newNode.Tag = "{" + text + "}";
    }
    return newNode;
}

private void button1_Click(object sender, EventArgs e)
{
    TreeNode chapter1 = Append(null, "chapter1");
    Append(chapter1, "sec1");
    Append(chapter1, "sec2");
    Append(chapter1, "sec3");

    TreeNode chapter2 = Append(null, "chapter2");
    Append(chapter2, "sec1");
    Append(chapter2, "sec2");
    Append(chapter2, "sec3");

    TreeNode chapter3 = Append(null, "chapter3");
    Append(chapter3, "sec1");
    Append(chapter3, "sec2");
    Append(chapter3, "sec3");
}

private void IncludeChapterAndSections(TreeNode treeNode, StringBuilder sb)
{
    TreeNodeCollection children = treeNode != null ? treeNode.Nodes : treeView1.Nodes;
    if (treeNode != null)
    {
        sb.AppendFormat("\\include {0}", treeNode.Tag.ToString());
        sb.AppendLine();
    }
    foreach (TreeNode child in children)
    {
        IncludeChapterAndSections(child, sb);
    }
}

private void button3_Click(object sender, EventArgs e)
{
    var header = File.ReadAllText(@"C:\dir\header.tex");
    var footer = File.ReadAllText(@"C:\dir\footer.tex");
    var sb = new StringBuilder();
    sb.AppendLine(header);
    IncludeChapterAndSections(null, sb);
    sb.AppendLine(footer);
    File.WriteAllText(@"C:\dir\final.tex", sb.ToString());
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM