如何在winforms C#中自动保存并自动加载所有属性?

如何在关闭时自动保存所有属性winforms并在加载时自动加载所有属性winforms? C#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace SControl { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < Controls.Count; i++) { System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(Controls[i])); Stream stream = File.Open("test.xml", FileMode.Create); x.Serialize(stream, Controls[i]); } } } } 

你的问题有点不清楚,但是

如果您需要保存/加载表单布局,请查看

C#中的Windows窗体用户设置

如果需要保存/加载一个对象/类,请查看

使用序列化将对象加载并保存到XML

编辑:

这将向您展示如何持久保存表单属性的某些设置。

使用XML保存和还原.NET表单的设置

另请参阅应用程序自动化层 – 使用XML动态生成GUI元素 – 表单和控件

所有这些都将引导您朝着您需要的方向前进。

我认为这里的主要目标是

  • 了解何时保存以及何时加载以及存储/检索这些设置的位置。
  • 您是否按用户存储这些设置? 在数据库中? 在xml文件中?
  • 接下来,您需要确定每个控件将保存/恢复的属性。 简单的位置/大小设置可能不会削减它,因为控件将具有各种复杂性(Button,TextBox,Gridview,ListView)
  • 现在,您需要弄清楚如何迭代窗体上的所有控件。 按钮,文本框,面板,控件中的控件(面板中的控件),甚至可能是您的用户控件。 这可以使用递归来完成。
  • 现在您需要决定xml文件的结构(如果您选择使用xml)。 这应该看起来像一个树结构,就像你将表单,它的控件和它们的控件看作树结构一样。

我不知道Form基类中内置了任何自动方法,但是自己添加它并不难。

您可以点击窗口加载并关闭事件以将所有相关属性缓存到后备存储,然后再重新加载它们。

Form.LoadForm.Closing事件处理程序注册事件处理程序。 发生Form.Closing时,将表单状态保存到文件或数据库。 当Form.Load发生时,检查是否存在已保存的状态,如果存在,则从已保存的状态重新加载。

您必须手动编码要保存的属性。

一种方便的方法是将这些个性化设置转换为Windows窗体应用程序设置 。

示例代码段:

 //save the winform position and size upon closing private void Form1_FormClosed( object sender, FormClosedEventArgs e) { Properties.Settings.Default.FormPosition = this.Location; Properties.Settings.Default.FormSize = this.Size; Properties.Settings.Default.Save(); } //load the winform position and size upon loading private void Form1_Load(object sender, EventArgs e) { this.Size = Properties.Settings.Default.FormSize; this.Location = Properties.Settings.Default.FormPosition; } 

更多参考:

  • 在C#中使用设置
  • 有关如何使用应用程序设置的任何好例子
  • 使用Windows窗体应用程序设置来个性化您的应用程序

将表单之类的对象转换为可以保存的内容的过程称为序列化。 不幸的是,我认为在WinForm中序列化表单没有开箱即用的方法。 我确实找到了如何克隆/序列化/复制和粘贴Windows窗体控件 ,并且由于窗体也是控件,您可以使用代码序列化属性。