c# - 保存表单状态然后以相同状态打开它

标签 c# winforms visual-studio-2010 savestate

我在 winforms 中有一个包含 3 个按钮的小程序。到目前为止,该程序允许用户通过单击相应的按钮来更改另一个按钮的颜色,而第三个按钮还没有做任何事情。我想要做的是让用户保存对表单所做的更改(保存表单状态)。因此,当重新打开表单时,它会以与保存时相同的状态打开。

我希望我清楚我在追求什么

这是表单的可视化:

enter image description here

如果有帮助,我目前拥有的代码:

public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            btnToColor.Text = "";
        }

        int c = 0;
        private void btnColorSwap_Click(object sender, EventArgs e)
        {
            if (c == 0)
            {
                btnToColor.BackColor = Color.Yellow;
                c++;

            }

            else if (c == 1)
            {
                btnToColor.BackColor = Color.YellowGreen;

                c++;
            }

            else if (c == 2)
            {
                btnToColor.BackColor = Color.LimeGreen;

                c = 0;
            }

        }
    }

最佳答案

这对您来说可能/可能不会更容易。

首先创建一个类来保存您的状态:

public class MyFormState {
    public string ButtonBackColor { get; set; }
}

现在,使用此对象为您的 Form 声明一个成员:

public partial class Form1 : Form {
    MyFormState state = new MyFormState();

在表单加载时,检查配置是否存在,然后加载它:

private void Form1_Load(object sender, EventArgs e) {
    if (File.Exists("config.xml")) {
        loadConfig();
    }

    button1.BackColor = System.Drawing.ColorTranslator.FromHtml(state.ButtonBackColor);
}

private void loadConfig() {
    XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
    using (FileStream fs = File.OpenRead("config.xml")) {
        state = (MyFormState)ser.Deserialize(fs);
    }
}

当您的表单关闭时..保存配置:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
    writeConfig();
}

private void writeConfig() {
    using (StreamWriter sw = new StreamWriter("config.xml")) {
        state.ButtonBackColor = System.Drawing.ColorTranslator.ToHtml(button1.BackColor);
        XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
        ser.Serialize(sw, state);
    }
}

然后您可以将成员添加到状态类中,它们将被写入 config.xml 文件中。

关于c# - 保存表单状态然后以相同状态打开它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14616958/

相关文章:

wpf - 将 Polygon 的高度绑定(bind)到 StackPanel 的高度

c# - 如何使用 C# 和 Open XML SDK 按特定文本拆分 Word 文档?

c# - 如何禁用面板中的水平滚动条

c# - 使用 Winforms 中运行的后台线程更新 UI 中的控件

.NET Visual Studio 生成错误 "another partial declaration of this type exists"

c++ - 使遗留代码 x64 兼容时出现非法读/写错误

c# - 使用 CodeContracts 强制正确实现 INotifyPropertyChanged - "requires unproven"

c# - Linq FindAll 和 Where 返回不同的结果

c# - 初学者继承问题 C#

.net - 为什么在我向窗体添加控件后 Visual C++ Designer 不工作?