Ошибка при попытке сохранение данных формы
Пытаюсь сохранить изменение в форме через Settings.Default, с label всё работает идеально, а с pictureBox не получается.
public Form8()
{
InitializeComponent();
pictureBox2.Image = Settings.Default["save1"].ToString();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void pictureBox2_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox2.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox2.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox6_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox6.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox6.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox5_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox5.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox5.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox8_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox8.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox8.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox3_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox3.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox3.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox7_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox7.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox7.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void pictureBox4_Click(object sender, EventArgs e)
{
if (IsFirstClick)
{
pictureBox4.Image = Image.FromFile("E:\\on.png");
IsFirstClick = false;
}
else
{
pictureBox4.Image = Image.FromFile("E:\\off.png");
IsFirstClick = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox2.Image = Image.FromFile("E:\\on.png");
pictureBox3.Image = Image.FromFile("E:\\on.png");
pictureBox4.Image = Image.FromFile("E:\\on.png");
pictureBox5.Image = Image.FromFile("E:\\on.png");
pictureBox6.Image = Image.FromFile("E:\\on.png");
pictureBox7.Image = Image.FromFile("E:\\on.png");
pictureBox8.Image = Image.FromFile("E:\\on.png");
}
private void button2_Click(object sender, EventArgs e)
{
pictureBox2.Image = Image.FromFile("E:\\off.png");
pictureBox3.Image = Image.FromFile("E:\\off.png");
pictureBox4.Image = Image.FromFile("E:\\off.png");
pictureBox5.Image = Image.FromFile("E:\\off.png");
pictureBox6.Image = Image.FromFile("E:\\off.png");
pictureBox7.Image = Image.FromFile("E:\\off.png");
pictureBox8.Image = Image.FromFile("E:\\off.png");
}
private void button3_Click(object sender, EventArgs e)
{
Settings.Default["save1"] = pictureBox2.Image;
Settings.Default.Save();
}
}
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Огромная куча повторяющегося кода.
Начнем с стого что картинку сохранить в настройки не получится. Можно конечно преобразовать ее в Base64 строку, но в вашем случае она же есть на диске, так почему бы просто не сохранить путь к ней? Но давайте сначала уберем повторяшки.
private string imageDir = @"E:\";
private string onPath = Path.Combine(imageDir, "on.png");
private string offPath = Path.Combine(imageDir, "off.png");
private Image onImg = Image.FromFile(onPath);
private Image offImg = Image.FromFile(offPath);
private void LoadSettings()
{
// предполагаю, что save1 имеет тип string
if (Settings.Default.save1 == onPath)
pictureBox2.Image = onImg;
else
pictureBox2.Image = offImg;
}
private void SaveSettings()
{
if (pictureBox2.Image == onImg)
Settings.Default.save1 = onPath;
else
Settings.Default.save1 = offPath;
Settings.Default.Save();
}
Вот и всего делов
Остальные методы тоже можно упростить
private void pictureBox_Switch(object sender, EventArgs e)
{
PictureBox pb = (PictureBox)sender;
pb.Image = IsFirstClick ? onImg : offImg;
IsFirstClick = !IsFirstClick;
}
И назначьте этот обработчик события на все одинаковые пикчабоксы 2-8. В дизайтере откройте события (кнопка с молнией) и выберите там для Click обработчик pictureBox_Switch. И не придется дублировать одно и то же 8 раз.