您好我試圖動態地使用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