将表单状态写入 xml C#

Writing form state to xml C#

我的目标是通过单击按钮(而不是关闭时)保存所有表单数据。为此,我使用了以下线程中给出的示例。 Saving the form state then opening it back up in the same state

我已尽力调整我的代码,但没有任何反应,也没有显示任何错误。我做错了什么?

这是我的代码的相关部分:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;

namespace WindowsFormsApplication1
{
    public partial class frmPayroll : Form
    {
        SaveData sd = new SaveData();
        public frmPayroll()
        {
            InitializeComponent();
        }
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            writeConfig();
        }
        private void writeConfig()
        {
            using (StreamWriter sw = new StreamWriter("config.xml"))
            {
                sd.Married = rdoMarr.Checked;
                sd.PayPd = cbPayPd.Text;
                sd.Allow = cbAllow.Text;
                sd.Gross = txtGross.Text;
                sd.Fit = txtFit.Text;
                sd.Soc = txtSoc.Text;
                sd.Med = txtMed.Text;
                sd.NetPay = txtNet.Text;
                sd.PayPd = cbPayPd.Text;
                XmlSerializer ser = new XmlSerializer(typeof(SaveData));
                ser.Serialize(sw, sd);
            }
        }
        private void frmPayroll_Load(object sender, EventArgs e)
        {
            if (File.Exists("config.xml"))
            {
                loadConfig();
            }
            sd.Married = rdoMarr.Checked;
            sd.PayPd = cbPayPd.Text;
            sd.Allow = cbAllow.Text;
            sd.Gross = txtGross.Text;
            sd.Fit = txtFit.Text;
            sd.Soc = txtSoc.Text;
            sd.Med = txtMed.Text;
            sd.NetPay = txtNet.Text;
        }
        private void loadConfig()
        {
            XmlSerializer ser = new XmlSerializer(typeof(SaveData));
            using (FileStream fs = File.OpenRead("config.xml"))
            {
                sd = (SaveData)ser.Deserialize(fs);
            }
        }
    }
    public struct SaveData
    {
        public bool Married;
        public string PayPd;
        public string Allow;
        public string Gross;
        public string Fit;
        public string Soc;
        public string Med;
        public string NetPay;
    }
}

您正在通过反序列化加载对象。

但是你在哪里将状态分配回你的控件?

查看frmPayroll_Load函数。

您正在尝试再次将数据分配回对象。

您必须将数据分配回表单控件。

应该是这样的(如果需要,您可能需要应用数据转换):

rdoMarr.Checked = sd.Married;
.
.
.
.
txtFit.Text = sd.Fit;
.
.
.
.