flowLayoutPanel1
読み込み時に 4 つの動的ボタンと静的保存ボタンを生成する小さなプログラムがあります。
私の目的は、動的ボタンの色を保存して、フォームを再読み込みまたは再度開いたときに、動的ボタンの色が保存されたのと同じ状態で読み込まれるようにすることです。
以下に、私が試みたことを示すためにコメントされたコードを含めます。ボタンの状態を保存するためにファイルを使用しxml
ており、状態を保持するクラスが含まれています。ただし、ボタンを作成して静的に保存する場合、私が使用している方法は正常に機能します。(私は1つの静的ボタンでのみ試しました)
インターフェース: 状態を保持するクラス:
public class MyFormState
{
public string ButtonBackColor { get; set; }
}
フォームコード:
public partial class Form1 : Form
{
//Form Member
MyFormState state = new MyFormState();
Button btn;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//loading xml file if it exists
if (File.Exists("config.xml"))
{
loadConfig();
}
//Genrating dynamic buttons
// flowLayoutPanel1.Controls.Clear();
for (int i = 0; i <= 3; ++i)
{
btn = new Button();
btn.Text = " Equation " + i;
flowLayoutPanel1.Controls.Add(btn);
//click event of buttons
btn.Click += new EventHandler(btn_Click);
}
btn.BackColor = System.Drawing.ColorTranslator.FromHtml(state.ButtonBackColor);
}
//method to load file
private void loadConfig()
{
XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
using (FileStream fs = File.OpenRead("config.xml"))
{
state = (MyFormState)ser.Deserialize(fs);
}
}
//saving the xml file and the button colors
private void writeConfig()
{
using (StreamWriter sw = new StreamWriter("config.xml"))
{
state.ButtonBackColor = System.Drawing.ColorTranslator.ToHtml(btn.BackColor);
XmlSerializer ser = new XmlSerializer(typeof(MyFormState));
ser.Serialize(sw, state);
}
}
int count = 0;
//backcolor change
void btn_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--;
}
}
//save file
private void btnSave_Click(object sender, EventArgs e)
{
writeConfig();
}
}
それが私のために働くために私が何を変更すべきかについての提案はありますか? ありがとう