繁体   English   中英

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

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

首先,我将父节点和子节点添加到树视图中,并带有按钮单击事件:

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

稍后,我创建一个删除按钮单击事件:

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;

}

现在,我想生成添加到文件中而不删除的所有内容。 我正在使用乳胶文件,因此我只需要编写\\ include即可。 因此,我使用页眉和页脚文件,以及它们之间的最终文件-在这里我应该将它们放在一起并添加生成的选项。 因此,我想到了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());
        }

也许您可以向我提供如何使我的作品得到评论?

谢谢。

TreeNode具有Tag属性,您可以使用该属性将任何对象固定到其上,因此,固定的是路径,该路径随后用于写入最终块。

还重构了树视图节点的附加部分。

这应该工作:

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