2023年6月22日发(作者:)
C#树形结构的保存与加载窗体控件:1、treeView12、button1(加载)、button2(保存)窗体代码: 1 private void button1_Click(object sender, EventArgs e) 2 { 3 (); 4 string xmlFileName = ""; 5 if ((xmlFileName)) 6 { 7 eViewState TreeState = new eViewState(); 8 eeViewState(treeView1, xmlFileName); 9 }10 }11
12 private void Form1_Load(object sender, EventArgs e)13 {14 lection = false;15 }16
17 private void button2_Click(object sender, EventArgs e)18 {19 string xmlFileName = "";20 eViewState TreeState = new eViewState();21 eeViewState(treeView1, xmlFileName);22 }
类模块名称:XmlTreeViewState 1 using System; 2 using ; 3 using ; 4 using ; 5
6 //功能 7 //本代码是在Syed Umar Anis的 8 ///Articles/13099/Loading-and-Saving-a-TreeView-control-to-an-XML-fi 9 //这个代码的基础上进⾏了修改并增加了能恢复TREEVIEW的展开的状态 和选中最后选择的⼀项 10
11 //1 ⽤XML保存和读取TREE VIEW的状态 12 //2 将⼀个XML⽂件加载到TREEVIEW中 13 namespace WindowsForms 14 { 15 public class XmlTreeViewState 16 { 17 public XmlTreeViewState() 18 { 19 } 20
21 # 22 private const string XmlNodeTag = "node"; 23
24 /* 25 *
37 #endregion 38
39 #region 保存TREEVIEW状态 40 public void SaveTreeViewState(TreeView treeView, string fileName) 41 { 42 XmlTextWriter textWriter = new XmlTextWriter(fileName, e); 43 tartDocument(); 44 tartElement("TreeView"); 45 SaveXmlNodes(, textWriter); 46 ndElement(); 47 (); 48 } 49 #endregion 50
51 #region 读取TreeView状态 52 public void LoadTreeViewState(TreeView treeView, string fileName) 53 { 54 XmlTextReader reader = null; 55 try 56 { 57 (); 58 // disabling re-drawing of treeview till all nodes are added 59 pdate(); 60 reader = new XmlTextReader(fileName); 61
62
63 TreeNode parentNode = null; 64
65 while (()) 66 { 67 if (pe == t) 68 { 69 if ( == XmlNodeTag) 70 { 71 TreeNode newNode = new TreeNode(); 72 bool isEmptyElement = yElement; 73
74 // loading node attributes 75 int attributeCount = uteCount; 76 if (attributeCount > 0) 77 { 78 for (int i = 0; i < attributeCount; i++) 79 { 80 Attribute(i); 81 SetAttributeValue(newNode, , ); 82 SetTreeViewState(treeView); 83 } 84 } 85
86 // add new node to Parent Node or TreeView 87 if (parentNode != null) 88 (newNode); 89 else 90 (newNode); 91
92 // making current node 'ParentNode' if its not empty 93 if (!isEmptyElement) 94 { 95 parentNode = newNode; 96 } 97 } 98 } 99 // moving up to in TreeView if end tag is encountered100 else if (pe == ment)101 {102 if ( == XmlNodeTag)103 {104 parentNode = ;105 }106 }107 else if (pe == laration)108 { //Ignore Xml Declaration
109 }110 else if (pe == )111 {112 return;113 }114 else if (pe == )115 {116 ();117 }118 }119 }120 finally121 {122 ate();123 ();124 }125 }126 #endregion127 128 #region 设置 展开后的节点 最后选中的节点129 private TreeNode LastSelectNode = null;//最后选中的节点130 private TreeNode ExpandNode = null;//展开后的节点131
132 // Expland LastSelect133 private void SetTreeViewState(TreeView treeView)134 {135 edNode = ExpandNode;136 //Expland137 if (ExpandNode != null)138 ();139
140 //Select141 if (LastSelectNode != null)142 edNode = LastSelectNode;143 }144 #endregion145
146 #region 保存XML节点147 private void SaveXmlNodes(TreeNodeCollection nodesCollection, XmlTextWriter textWriter)148 {149 for (int i = 0; i < ; i++)150 {151 TreeNode node = nodesCollection[i];152 tartElement(XmlNodeTag);// "node";153
154 ttributeString(XmlNodeTextAtt, );// "text";155 ttributeString(XmlNodeImageIndexAtt, ng());//"imageindex";156
157 if (nded == true)158 ttributeString(XmlNodeExpandState, ng());////展开状态159
160 if (cted)161 ttributeString(XmlNodeIsSelect, ng());//是否选中162
163 if ( != null)164 ttributeString(XmlNodeTagAtt, ng());165
166 ttributeString(XmlNodeIndex, ng());//Index167
168 // add other node properties to serialize here169
170 if ( > 0)171 {172 SaveXmlNodes(, textWriter);173 }174 ndElement();175 }176 }177 #endregion178
179 #region 设置XML属性180 private void SetAttributeValue(TreeNode node, string propertyName, string value)181 {182 if (propertyName == XmlNodeTextAtt) //text183 {184 = value;185 }186 else if (propertyName == XmlNodeImageIndexAtt) //ImageIndex187 {188 ndex = (value);189 }190 else if (propertyName == XmlNodeExpandState)191 {192 ExpandNode = node;193 }194 else if (propertyName == XmlNodeIsSelect)195 {196 LastSelectNode = node;197 }198 else if (propertyName == XmlNodeTagAtt)//tag199 {200 = value;201 }202 else if (propertyName == XmlNodeIndex)203 {204 // ⽤来标识 这样看XML⽂件时结构清晰205 }206 }207 #endregion208
209 #region 把XML⽂件读取到TREE中210 public void LoadXmlFileInTreeView(TreeView treeView, string fileName)211 {212 XmlTextReader reader = null;213 try214 {215 pdate();216 reader = new XmlTextReader(fileName);217
218 TreeNode n = new TreeNode(fileName);219 (n);220 while (())221 {222 if (pe == t)223 {224 bool isEmptyElement = yElement;225 StringBuilder text = new StringBuilder();226 ();227 int attributeCount = uteCount;228 if (attributeCount > 0)229 {230 (" ( ");231 for (int i = 0; i < attributeCount; i++)232 {233 if (i != 0) (", ");234 Attribute(i);235 ();236 (" = ");237 ();238 }239 (" ) ");240 }241
242 if (isEmptyElement)243 {244 (ng());245 }246 else247 {248 n = (ng());249 }250 }251 else if (pe == ment)252 {253 n = ;254 }255 else if (pe == laration)256 {257
258 }259 else if (pe == )260 {261 return;262 }263 else if (pe == )264 {265 ();266 }267
268 }269 }270 finally271 {272 ate();273 ();274 }275 }276 #endregion277 }278 }XmlTreeViewState
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687385557a6143.html
评论列表(0条)