0

私のプログラムでは、最初に 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");
4

0 に答える 0