您的位置:首页 > 编程语言 > C#

C# 利用xml生成控件

2015-06-12 16:03 429 查看
这二天 在写xml生成控件 大致的意思是这样 但是控件属性一多 需要判断 和读写的东西就多了 还不是太深刻 先记下这2天的东西!

先展示xml的格式

<?xml version="1.0" encoding="utf-8"?>
<XmlDataForm Name="Form1" Text="Form1" ClientSize="587,428" DataEntity="">
<Controls>
<DataGridView name="dataGridView1" value="" Location="14,254" Size="240,150" text="" />
<Button name="button2" value="确定" Location="12,24" Size="75,23" text="确定" />
<Label name="label2" value="label1" Location="12,53" Size="41,12" text="我是lable" />
</Controls>
</XmlDataForm>


一些简单的控件 和他属性 现在 怎么能通过读写xml生成控件呢

``XmlDocument document = new XmlDocument();
document.Load(@"D:\Form1.xml");//xml路径
XmlNodeList list_body = document.SelectNodes("XmlDataForm");
CreateFormfromXML.XmlForm xmlform = new CreateFormfromXML.XmlForm(list_body[0]);
Control[] rst = xmlform.Controls;
for (int i = 0; i < rst.Length; i++)
{
this.Controls.Add(rst[i]);
}
this.Text = xmlform.Text;**重点内容**


**调用 了 xmlform这个方法

public XmlForm(XmlNode node)
{
weight = node.Attributes["ClientSize"].Value.Split(',')[0].ToString();
height = node.Attributes["ClientSize"].Value.Split(',')[1].ToString();
text = node.Attributes["Text"].Value.ToString();
//  backColor = node.Attributes["backcolor"].Value.ToString();
//    XmlNodeList list = node.ChildNodes;
XmlNodeList list = node.SelectSingleNode("Controls").ChildNodes;
controls = new Control[list.Count];
for (int i = 0; i < list.Count; i++)
{
XmlNode _node = list[i];
string className = _node.Name;
Assembly assembly = Assembly.LoadFrom(@"System.Windows.Forms.dll");
if(className!=null){
Type type = assembly.GetType(@"System.Windows.Forms."+className);
Object obj = Activator.CreateInstance(type);
Control control = (Control)obj;
control.Left = int.Parse(_node.Attributes["Location"].Value.Split(',')[0].ToString());
control.Top = int.Parse(_node.Attributes["Location"].Value.Split(',')[1].ToString());
control.Width = int.Parse(_node.Attributes["Size"].Value.Split(',')[0].ToString());
control.Height = int.Parse(_node.Attributes["Size"].Value.Split(',')[1].ToString());
control.Name = _node.Attributes["name"].Value.ToString();
control.Text = _node.Attributes["text"].Value.ToString();
if (control is ComboBox)
{
ComboBox com = (ComboBox)control;
for (int j = 0; j < 3;j++ ) {                  com.Items.Add(_node.SelectSingleNode("init").InnerText.Split(',')[j]);
}

}

controls[i] = control;
}
}
}


人太懒 没打注释 反正很容易看明白!重点内容*重点内容*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: