Sae*_*ani 9 c# treeview serialization winforms
在我的C#WinForms程序中,我有一个只包含父节点的树视图(因此,没有子节点)它就像一个列表框,但我需要它,因为它具有Name,Tag和Text等节点的不同属性.
不,我希望能够将此树视图的内容保存到文件中(基本上是一个文本文件,我称之为*.MVIA).问题是什么是保存文件中节点的所有三个属性的最佳方法,以便以后可以再次加载?
目前我提出了这个想法:
private void menuFileSave_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
foreach(TreeNode node in treeViewFiles.Nodes)
{
sb.AppendLine(node.Name);
}
SaveFileDialog saveList = new SaveFileDialog();
saveList.DefaultExt = "*.mvia";
saveList.Filter = "MVIA Files|*.mvia";
if (saveList.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(saveList.FileName, sb.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,每个节点的每个Name属性都将保存在一行中.现在我还需要添加它的Text和Tag属性,但后来我很难读回来(老实说我不知道怎么做).
你能给我一些想法,保存每个节点的所有三个属性的最佳方法是什么,以后能够轻松加载它?
谢谢.
Ste*_*cya 19
您可以使用BinaryFormatter序列化/反序列化节点
public static void SaveTree(TreeView tree, string filename)
{
using (Stream file = File.Open(filename, FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(file, tree.Nodes.Cast<TreeNode>().ToList());
}
}
public static void LoadTree(TreeView tree, string filename)
{
using (Stream file = File.Open(filename, FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(file);
TreeNode [] nodeList = (obj as IEnumerable<TreeNode>).ToArray();
tree.Nodes.AddRange(nodeList);
}
}
Run Code Online (Sandbox Code Playgroud)