动态Windows表单列表与XML
本文关键字:XML 列表 表单 Windows 动态 | 更新日期: 2023-09-27 18:12:10
我正在创建一个动态表单,如果我点击"添加",一个新的面板出现了一组按钮。
在这个面板中,我想添加一个列表,它将记住创建了多少按钮。因此,我想实现一个列表,但我想再次增加,即使我们重新启动控制台。
可能有一个技巧把它放在一个XMLfile中。通过这种方式,我的策略可以重命名为CSV中存在的最大值,但我不知道如何记录和如何增加…
任何想法?
public class SerialStrategyFuture
{
public string StrategyName { get; set; }
public string NumStrategy { get; set; }
}
public void CreateStrategyFuture()
{
ConsoleStrategyItem strategyItemFuture = new ConsoleStrategyItem();
strategyItemFuture.Location = new Point(3, 3);
futureContainer.Height += 85;
futureContainer.Controls.Add(strategyItemFuture);
SerialStrategyFuture strategyFuture = new SerialStrategyFuture();
strategyFuture.StrategyName = "Strat Future ";
strategyFuture.NumStrategy = "How to increment it ???";
XmlSerializer serializer = new XmlSerializer(typeof(SerialStrategyFuture));
TextWriter textWriter = new StreamWriter(@"C:'Users'...");
serializer.Serialize(textWriter,strategyFuture);
textWriter.Close();
ConsoleStrategyItem.Instance.txtStrategyName.Text = "Strat Future 1 ";
}
我不确定是否可以序列化utureContainer。控制列表。因此,我将这样使用:
-
为你的按钮声明一个列表:
-
每次你的用户创建一个新的按钮:controlList.add (strategyItemFuture);
- 在程序关闭或其他合适的时刻序列化列表:
- 程序启动时反序列化
- 构建一个foreach循环,从反序列化的List中提取按钮。
/// <summary>
/// Serializes a file to a compressed XML file. If an error occurs, the exception is NOT caught.
/// </summary>
/// <typeparam name="T">The Type</typeparam>
/// <param name="obj">The object.</param>
/// <param name="fileName">Name of the file.</param>
public static void SerializeToXML<T>(T obj, string fileName)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (FileStream fs = new FileStream(fileName, FileMode.Create))
{
using (GZipStream compressor = new GZipStream(fs, CompressionMode.Compress))
{
serializer.Serialize(compressor, obj);
}
}
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Deserializes an object from XML.
/// </summary>
/// <typeparam name="T">The object</typeparam>
/// <param name="file">The file.</param>
/// <returns>
/// The deserialized object
/// </returns>
public static T DeserializeFromXml<T>(string file)
{
T result;
XmlSerializer ser = new XmlSerializer(typeof(T));
using (FileStream fs = new FileStream(file, FileMode.Open))
{
using (GZipStream decompressor = new GZipStream(fs, CompressionMode.Decompress))
{
result = (T)ser.Deserialize(decompressor);
return result;
}
}
}
}
Usage:
SerializeToXML(controlList , yourPath);
this.controlList = DeserializeFromXml<List<ConsoleStrategyItem>>(yourPath);
我做的不仅仅是存储按钮的数量,但这有一个好处,当你的按钮有更多的逻辑时,你可以存储更多的数据