[英]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.