动态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 ";
}

动态Windows表单列表与XML

我不确定是否可以序列化utureContainer。控制列表。因此,我将这样使用:

  1. 为你的按钮声明一个列表:

  2. 每次你的用户创建一个新的按钮:controlList.add (strategyItemFuture);

  3. 在程序关闭或其他合适的时刻序列化列表:
  4. 程序启动时反序列化
  5. 构建一个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);

我做的不仅仅是存储按钮的数量,但这有一个好处,当你的按钮有更多的逻辑时,你可以存储更多的数据