您好我试图动态地使用2D阵列创建的按钮的这种4×4栅格的颜色状态保存到XML文档的控制状态:保存当窗体关闭
然而,当我按保存我一直得到这个消息:
我可以使这个工作,如果我使用一维数组的按钮,但不会给我我想要的网格,但当我使用二维数组的按钮它不会工作:
我能改,所以我可以得到这个工作的任何建议都大加赞赏:
这是我的代码,我有:
FormState
类:
public class FormState
{
public string ButtonBackColor { get; set; }
}
表单代码:
public partial class Form1 : Form
{
int col = 4;
int row = 4;
Button[,] buttons;
FormState[,] states;
public Form1()
{
InitializeComponent();
buttons = new Button[col, row];
states = new FormState[col, row];
}
public void placeRows()
{
for (int r = 0; r < row; r++)
{
createColumns(r);
}
}
public void createColumns(int r)
{
int s = r * 25; //gap
for (int c = 0; c < col; c++)
{
buttons[r, c] = new Button();
buttons[r, c].SetBounds(75 * c, s, 75, 25);
buttons[r, c].Text = Convert.ToString(c);
buttons[r, c].Click += new EventHandler(grid_Click);
panel1.Controls.Add(buttons[r, c]);
}
}
int count = 0;
//backcolor change
void grid_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--;
}
}
private void Form1_Load(object sender, EventArgs e)
{
placeRows();
if (File.Exists("config.xml"))
{
loadConfig();
}
for (int i = 0; i < col; ++i)
{
for (int j = 0; j < row; ++j)
{
if (states[i,j] != null)
{
buttons[i,j].BackColor = ColorTranslator.FromHtml(states[i,j].ButtonBackColor);
}
}
}
}
//method to load file
private void loadConfig()
{
XmlSerializer ser = new XmlSerializer(typeof(FormState[]));
using (FileStream fs = File.OpenRead("config.xml"))
{
states = (FormState[,])ser.Deserialize(fs);
}
}
private void writeConfig()
{
for (int i = 0; i < col; i++)
{
for (int j = 0; j < row; j++)
{
if (states[i,j] == null)
{
states[i,j] = new FormState();
}
states[i,j].ButtonBackColor = ColorTranslator.ToHtml(buttons[i,j].BackColor);
}
using (StreamWriter sw = new StreamWriter("config.xml"))
{
XmlSerializer ser = new XmlSerializer(typeof(FormState[]));
ser.Serialize(sw, states);
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
writeConfig();
}
}
在您的例外中单击“查看详细信息”,它很可能说您的课程没有标记为可序列化 – 2013-03-04 01:04:43
不,它显示:{“生成XML文档时发生错误。”} – Tacit 2013-03-04 01:07:15
如果您继续钻探?内部异常? – 2013-03-04 01:08:08