0
我有一个小程序,在加载flowLayoutPanel1
时产生四个动态按钮和一个静态保存按钮。点击保存按钮时保存动态控制状态
我的目标是保存动态按钮的颜色,以便当表单重新加载或再次打开时,动态按钮的颜色以与保存的状态相同的状态加载。
下面我将包括我的代码,它已被评论,以演示我已经尝试过。 我正在使用xml
文件来保存按钮状态并包含一个保存状态的类。然而,我使用的方法工作正常,如果创建我的按钮来保存静态。 (我只用一个静态的按钮尝试过)
接口: 类,用于保存状态:
public class MyFormState
{
public string ButtonBackColor { get; set; }
}
表单代码:
public partial class Form1 : Form
{
//Form Member
MyFormState state = new MyFormState();
Button btn;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//loading xml file if it exists
if (File.Exists("config.xml"))
{
loadConfig();
}
//Genrating dynamic buttons
// flowLayoutPanel1.Controls.Clear();
for (int i = 0; i <= 3; ++i)
{
btn = new Button();
btn.Text = " Equation " + i;
flowLayoutPanel1.Controls.Add(btn);
//click event of buttons
btn.Click += new EventHandler(btn_Click);
}
btn.BackColor = System.Drawing.ColorTranslator.FromHtml(state.ButtonBackColor);
}
//method to load file
private void loadConfig()
{
XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
using (FileStream fs = File.OpenRead("config.xml"))
{
state = (MyFormState)ser.Deserialize(fs);
}
}
//saving the xml file and the button colors
private void writeConfig()
{
using (StreamWriter sw = new StreamWriter("config.xml"))
{
state.ButtonBackColor = System.Drawing.ColorTranslator.ToHtml(btn.BackColor);
XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
ser.Serialize(sw, state);
}
}
int count = 0;
//backcolor change
void btn_Click(object sender, EventArgs e)
{
Button button = sender as Button;
if (count == 0)
{
button.BackColor = Color.Red;
count++;
}
else if (count == 1)
{
button.BackColor = Color.Blue;
count--;
}
}
//save file
private void btnSave_Click(object sender, EventArgs e)
{
writeConfig();
}
}
什么我应该改变,因此任何建议它适合我吗?谢谢
“但是,我使用的方法工作正常,如果创建我的按钮来保存静态。”那么最新的问题,我不知道你是什么问题。你能澄清吗? – 2013-03-01 13:58:43
你的应用程序有4个按钮,但是你的代码没有任何逻辑来处理4个按钮。 (不仅用于序列化,还用于改变颜色) – Steve 2013-03-01 13:58:48