[英]Save WinForm or Controls to File
我一直在開發一個應用程序,該應用程序允許用戶通過將標簽控件添加到面板(我用作容器)來制作用於打印目的的標簽模板。 我已經達到了需要將模板保存到文件中的目的,以后可以將其加載到內存中進行打印。 由於表單不可序列化,因此有人對我如何將表單或容器(帶有添加的標簽控件)保存到文件中以供日后重用的建議嗎?
謝謝。
我不會直接將表格序列化為文件。 聽起來您需要創建一個類來保存用戶工作的狀態。 然后,您應該將該類與文件進行序列化。 有使用二進制或XML序列化的內置方法。
創建一個結構,該結構包含有關每個Label
足夠信息(且不再包含),您可以從中重構Label
。
編寫一個方法,該方法采用List<MyStruct>
並從結構中填充Panel
。
編寫方法以序列化和反序列化此列表。
將整個內容封裝在一個類中。
就個人而言,我會將其序列化為JSON。 當帶回它時,可以使用遍歷並通過反射設置屬性的通用方法。 還要注意,我鏈接到的庫將自動序列化傳遞給它的對象。
[{ "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);
這並非易事,但我個人將設置一個可以遞歸調用的函數,該函數會將節點添加到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);
}
}
嘗試這個。 它使用ISerializationSurrogate
接口解決表單對象不可序列化的問題:
如何使用代理序列化未標記為“可序列化”的對象。 http://www.codeproject.com/KB/dotnet/Surrogate_Serialization.aspx
您可以在運行時獲取有關表單控件的位置,大小和其他屬性,並將該狀態保存在XML或JSON文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.