在退出时保存应用程序的所有更改

本文关键字:应用程序 退出 保存 | 更新日期: 2023-09-27 17:57:04

我有一个 C# 中的 Windows 窗体应用程序,我可以在其中在运行时添加多个控件。关闭应用后保存所有更改的最佳/最简单的方法是什么?基本上,如果我在运行时添加两个按钮,在我关闭应用程序并再次打开它后,我应该在那里拥有所有功能和设置的拖曳按钮。

您能推荐一些可能的解决方案来实现这一目标吗?

在退出时保存应用程序的所有更改

实际上,

如果您想在运行时向表单添加未知数量的控件,然后在下次运行时再次重新创建它们,实际上您可以。

将对象写入硬盘并再次加载它们的方法之一。 您可以使用序列化来执行此操作。 遗憾的是,您无法序列化控件对象,但您可以创建一些包含公共属性(如 {类型、位置、大小、前色、背景色})的类。

退出时创建一个列表并创建一个对象来保存每个控件属性,然后将该对象添加到列表中 最后序列化整个列表。

查看这些链接以了解有关序列化的更多信息什么是 [可序列化],何时应使用它?

http://www.dotnetperls.com/serialize-list

我还可以为您提供此代码,以帮助您了解想法

    [Serializable]//class to hold the common properties
    public class Saver
    {
        public Saver() { }
        public Point Location { get; set; }
        public Type Type { get; set; }
        public Size Size { get; set; }
        public string Text { get; set; }
        //add properties as you like but maker sure they are serializable too
    }

以下两个函数保存和加载数据

    public void SaveControls(List<Control> conts, Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        List<Saver> sv = new List<Saver>();
        foreach (var item in conts)
        {
            //save the values to the saver object
            Saver saver = new Saver();
            saver.Type = item.GetType();
            saver.Location = item.Location;
            saver.Size = item.Size;
            saver.Text = item.Text;
            sv.Add(saver);
        }
        bf.Serialize(stream, sv);//serialize the list
    }

这是第二个

    public List<Control> LoadControls(Stream stream)
    {
        BinaryFormatter bf = new BinaryFormatter();
        List<Saver> sv =(List<Saver>) bf.Deserialize(stream);
        List<Control> conts = new List<Control>();
        foreach (var item in sv)
        {
            //create an object at run-time using it's type
            Control c = (Control)Activator.CreateInstance(item.Type);
            //reload the saver values into the control object
            c.Location = item.Location;
            c.Size = item.Size;
            c.Text = item.Text;
            conts.Add(c);
        }
        return conts;
    }

您可以保存一些描述应用程序上下文的 XML 文件