我这里需要做中文、英文,通过XmlWriter将控件存入Xml
TextBox、ConboBox之类的控件不存入,因为他是提供输入的,这里主要存入窗体中的label、Button之类的控件属性
首先要知道遍历窗体中的控件的方法
public void VisitAll(Control CrlContainer)
{
foreach (Control kCrl in CrlContainer.Controls)
{
if (kCrl.Controls.Count > 0)
{
VisitAll(kCrl);
}
//放你要的操作
}
}
我写的一个完整的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Windows.Forms;
namespace Myc.Prj.View
{
public class CreateXML
{
XmlWriter writer;
bool IsFirst = true, Begin = false;
Form frm;
public CreateXML()
{
}
/// <summary>
/// 生成以窗体Name为名字的XML文件
/// </summary>
/// <param name="frm"></param>
public CreateXML(Form frm)
{
this.frm = frm;
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = false;
settings.NewLineOnAttributes = false;
writer = XmlWriter.Create(frm.Name + ".xml", settings);
writer.WriteStartDocument();
writer.WriteStartElement("View");
WriteElementXML(frm);
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
private void WriteElementXML(Control cons)
{
if (IsFirst)
{
writer.WriteStartElement(cons.Name);
IsFirst = false;
}
else
{
Begin = true;
writer.WriteStartElement("Control");
writer.WriteAttributeString("name", cons.Name);
writer.WriteAttributeString("value", cons.Text);
writer.WriteEndElement();
}
foreach (Control con in cons.Controls)
{
if (con.Controls.Count > 0 && !(con is DataGridView))//要加&& !(con is DataGridView)否则遍历DataGridView里面的控件
{
WriteElementXML(con);
}
if (con.Name == "")
continue;
if (!(con is TextBox) && !(con is ComboBox) && !(con is GroupBox))//这些是不需要的类型,排除GroupBox,否则同一个GroupBox出现两个
{
writer.WriteStartElement("Control");
writer.WriteAttributeString("name", con.Name);
writer.WriteAttributeString("value", con.Text);
writer.WriteEndElement();
}
}
if (!Begin)
{
writer.WriteEndElement();
Begin = false;
}
}
}
}
界面处只需要在构造函数里面new CreateXML(this);
就会生成以窗体Name为名字的XML文件
如果需要存所有的控件只需要将上面的条件去掉即可