2009-11-03 97 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