私のプログラムでは、最初に 8 つのボタンがあります (それぞれが家の中の光を表しています)。ユーザーは、プログラムに新しいボタン (ライト) を追加できます。私はこれらを FlowLayoutPanel(FLP) に持っており、プログラムが閉じるたびに、FLP の位置、高さと幅、ボタンの現在の情報 (名前、テキスト、色などを含む) を含む、フォームの現在の状態を保存します。 XML ファイルに。
FLP の位置またはサイズが変更された場合、プログラムが再ロードされると、ボタンが変更された場合に更新されます。ただし、私が提供したデフォルトの 8 つのボタンを禁止します。ユーザーが新しいボタンを 1 つまたはいくつか追加すると、それらは 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");