0

在我的程序中,我从一开始就有八个按钮(每个按钮都代表房子里的一盏灯)。用户可以在程序中添加一个新按钮(灯)。我在 FlowLayoutPanel(FLP) 中有这些,每次程序关闭时都会保存表单的当前状态,包括 FLP 的位置、其高度和宽度以及按钮的当前信息(包括它们的名称、文本、颜色等)到一个 XML 文件。

如果 FLP 的位置或大小发生变化,当程序重新加载时,它们将被更新,就像您想的那样,如果按钮发生了变化,那么它们将被更新。但是,除了我提供的默认八个按钮之外,如果用户添加一个或几个新按钮,那么它们会保存到 xml 文件中,但程序会重新加载,从该 xml 读取,这些新按钮将被丢弃。

对此有任何想法。

当前代码:读取 XML 文件(来自另一个 .cs 文件)

if (roomCtrl is Button)

{

xmlSerialisedForm.WriteElementString("Text", ((Button)roomCtrl).Text);
xmlSerialisedForm.WriteElementString("Backcolor",((Button)roomCtrl).BackColor.ToString());

}

if (roomCtrl is FlowLayoutPanel)
{
xmlSerialisedForm.WriteElementString("Width", ((FlowLayoutPanel)roomCtrl).Size.Width.ToString());     
xmlSerialisedForm.WriteElementString("Height",   ((FlowLayoutPanel)roomCtrl).Size.Height.ToString());

xmlSerialisedForm.WriteElementString("X", ((FlowLayoutPanel)roomCtrl).Location.X.ToString());
 xmlSerialisedForm.WriteElementString("Y",((FlowLayoutPanel)roomCtrl).Location.Y.ToString());


}

当前代码:从 XML 文件中读取(这是来自另一个 .cs 文件)

case "System.Windows.Forms.Button":
if (n["Backcolor"].InnerText == "Color [LawnGreen]")
{
((System.Windows.Forms.Button)ctrlToSet).BackColor = System.Drawing.Color.LawnGreen;
}
else if (n["Backcolor"].InnerText == "Color [Tomato]")
{
((System.Windows.Forms.Button)ctrlToSet).BackColor = System.Drawing.Color.Tomato;
}
break;

case "System.Windows.Forms.FlowLayoutPanel":
((System.Windows.Forms.FlowLayoutPanel)ctrlToSet).Size = new System.Drawing.Size(Convert.ToInt32(n["Width"].InnerText), Convert.ToInt32(n["Height"].InnerText));

((System.Windows.Forms.FlowLayoutPanel)ctrlToSet).Location = new System.Drawing.Point(Convert.ToInt32(n["X"].InnerText), Convert.ToInt32(n["Y"].InnerText));

if (controlType == "System.Windows.Forms.Button")
{
Button b = new Button();
b.Name = controlName;
b.Text = n["Text"].InnerText;
if (n["Backcolor"].InnerText == "Color [LawnGreen]")
{
((System.Windows.Forms.Button)ctrlToSet).BackColor = System.Drawing.Color.LawnGreen;

{
((System.Windows.Forms.Button)ctrlToSet).BackColor = System.Drawing.Color.Tomato;
}
FlowLayoutPanel flpSockets = (FlowLayoutPanel)ctrlToSet;
flpSockets.Controls.Add(b);
}
break;

我想我在读取 FLP 的 xml 文件时遗漏了一些东西,但不确定。

添加按钮的代码(来自另一个表单)

private void button2_Click(object sender, EventArgs e)
{
if (rt.roomBool == true)
{
socket = new Button();
socket.Name = "btn"+txtSocketName.Text;
socket.Text = txtSocketName.Text;
socket.Size = new System.Drawing.Size(70, 60);
socket.BackColor = Color.LawnGreen;
rt.flpSockets.Controls.AddRange(new System.Windows.Forms.Control[] { this.socket });

rt.flpSockets.Height = 199;
rt.flpSockets.Location = new System.Drawing.Point((rt.flpSockets.Location.X), 20);

rt.Show(); 
}

从 xml 文件目标读取的代码

FormSerialisor.Serialise(this, Application.StartupPath + @"\roomTemplate.xml");
4

0 回答 0