C# 保存表单状态,然后在相同状态下将其打开
我在winforms中有一个包含3个按钮的小程序。到目前为止,该程序允许用户通过单击相应的按钮来更改另一个按钮的颜色,而第三个按钮尚未执行任何操作。我想做的是让用户保存对表单所做的更改(保存表单状态)。因此,当窗体重新打开时,它将以与保存时相同的状态打开 我希望我清楚我在追求什么 以下是表单的可视化: 我目前掌握的代码(如果有帮助):C# 保存表单状态,然后在相同状态下将其打开,c#,winforms,visual-studio-2010,savestate,C#,Winforms,Visual Studio 2010,Savestate,我在winforms中有一个包含3个按钮的小程序。到目前为止,该程序允许用户通过单击相应的按钮来更改另一个按钮的颜色,而第三个按钮尚未执行任何操作。我想做的是让用户保存对表单所做的更改(保存表单状态)。因此,当窗体重新打开时,它将以与保存时相同的状态打开 我希望我清楚我在追求什么 以下是表单的可视化: 我目前掌握的代码(如果有帮助): public Form1() { InitializeComponent(); } p
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;
}
}
}
如果查看项目属性页,可以添加设置文件 要使用代码中的设置,请执行以下操作:
Properties.Settings.Default.SettingName
请记住,这些设置是本地设置,需要在每台机器上指定
示例代码:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.btn1 = button1.UseVisualStyleBackColor ? Color.Transparent : button1.BackColor;
Properties.Settings.Default.btn2 = button1.UseVisualStyleBackColor ? Color.Transparent : button2.BackColor;
Properties.Settings.Default.btn3 = button1.UseVisualStyleBackColor ? Color.Transparent : button3.BackColor;
}
private void Form1_Load(object sender, EventArgs e)
{
if (Properties.Settings.Default.btn1 != Color.Transparent) button1.BackColor = Properties.Settings.Default.btn1;
if (Properties.Settings.Default.btn2 != Color.Transparent) button1.BackColor = Properties.Settings.Default.btn2;
if (Properties.Settings.Default.btn3 != Color.Transparent) button1.BackColor = Properties.Settings.Default.btn3;
}
这里是指向MSDN上设置类的链接
属性页
这对你来说可能/可能不容易 首先创建一个类来保存您的状态:
public class MyFormState {
public string ButtonBackColor { get; set; }
}
现在,使用此对象为您的表单
声明一个成员:
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);
}
}
然后,您可以将成员添加到state类中,并将其写入config.xml文件。通常在存储用户界面设置时,标准方法是使用xml文件保存或加载设置。我在本例中使用xml保存用户界面组件,希望它有用
您想在该过程中保存状态,还是在应用程序执行之间保存状态?我不确定这意味着什么老实说,我正在寻找一种简单的方法来保存formI的状态。我的意思是,您想保存状态,以便下次运行程序时表单返回到该状态,或者下次您在关闭表单后打开表单时(不结束程序)?我想保存状态,以便下次运行程序时,表单返回到该状态检查,并针对每个用户。除非他使用的是更难更改的应用程序设置。我有一个愚蠢的问题:什么是项目属性页?我在哪里可以找到它们?序列化表单不是更容易吗。。我的意思是在未来的发展方面。@SimonWhitehead-我想他只是想保存按钮的颜色,而不是整个数据@默契-检查答案末尾的图片!这个解决方案很有效。问题是,如果您需要对列表框中的所有项执行此操作,那么如果您使用foreach循环遍历列表框中的项并序列化每个项(您必须这样做),事情会变得非常糟糕。加载时,您会得到一个很好的异常,说明您已经在文件的开头声明了XML名称空间1,并且每次序列化时都会这样做。有解决方法吗?只需将它们存储在字符串列表中。序列化程序将处理它。