2009-11-03 119 views
1

我一直在研究一个应用程序,它允许用户通过向面板(我用作容器)添加标签控件来制作用于打印目的的标签模板。我已经达到了需要将模板保存到一个文件的地步,以后我可以将它加载到内存中进行打印。由于表单不是可序列化的,任何人都不知道如何将表单或容器(添加了标签控件)保存到可以稍后重用的文件中?将WinForm或控件保存到文件

谢谢。

回答

2
  1. 创建关于每个Label包含足够的信息(没有更多)的结构体,你可以从它重构Label

  2. 编写一个方法,它需要一个List<MyStruct>并从您的结构中填充Panel

  3. 编写方法来序列化和反序列化这个列表。

  4. 封装在一个类的整个事情。

+0

这正是我在阅读OG的答案后所想到的。谢谢! – Nathan 2009-11-03 20:30:28

+0

把它全部编码起来,它现在工作完美。非常感谢大家。 – Nathan 2009-11-03 22:08:29

1

就我个人而言,我会将其序列化为JSON。 将它带回时,可以使用通过方法 循环并通过反射设置属性。 另请注意,我链接的库会自动序列化您传递给它的对象。

JSON

JSON.NET

[{ "Label": [{"Top": 102}, {"Left": 105}, {"Text": "blah, blah"}] }] 

从JSON.NET

Product product = new Product(); 
product.Name = "Apple"; 
product.Expiry = new DateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes = new string[] { "Small", "Medium", "Large" }; 

string json = JsonConvert.SerializeObject(product); 
//{ 
// "Name": "Apple", 
// "Expiry": new Date(1230422400000), 
// "Price": 3.99, 
// "Sizes": [ 
// "Small", 
// "Medium", 
// "Large" 
// ] 
//} 

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json); 
+0

从未使用JSON,但我不反对学习新事物。 – Nathan 2009-11-03 19:32:18

0

你能得到关于窗体的控件在运行时的位置,大小和其他属性和保存状态在XML或JSON文件中。

1

这不是微不足道的,但我个人会设置一个函数,可以递归调用,将节点添加到XML文件。

我没有实际的代码,但伪代码看起来像这样:(你需要做一些清理工作,因为我在没有Intellisense的帮助下从头开始做这件事。)

XmlDocument doc; 

function SaveForm() 
{ 
    doc = new XmlDocument("FormInfo"); 
    foreach(Control ctrl in this.Controls) 
    { 
     AddControlToXml(ctrl, doc.Documentelement); 
    } 
} 

function AddControlToXml(Control ctrl, XmlNode currentNode) 
{ 
    XmlNode n = new XmlNode; 
    Node.InnerText = ctrl.Name; 
    foreach(Control ctrl2 in ctrl.Controls) 
    { 
     AddControlToXml(ctrl2); 
    } 

} 
+0

看起来像C#给我。 (除了JavaScript函数声明) – ChaosPandion 2009-11-03 19:25:27

+0

我没有在这里看到递归...这是第一级迭代 – jmayor 2009-11-03 20:02:29

+0

以及两级迭代..你不会进一步说第一个容器.. – jmayor 2009-11-03 20:04:05

4

我不会直接将表格序列化为文件。听起来你需要创建一个能够保持用户工作状态的类。然后,您应该将该类序列化为文件并从文件中进行序列化。内置的方法使用二进制或XML序列化。

+0

@Nathan:请注意,如果使用此方法,则必须根据状态类中存在的数据再次动态地创建控件。 – 2009-11-03 20:02:15

+0

这可能不会成为问题。我只想从每个控件获取重要的属性信息,然后将其序列化为文件正确的? – Nathan 2009-11-03 20:11:56