在退出时保存应用程序的所有更改
本文关键字:应用程序 退出 保存 | 更新日期: 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 文件