Есть форма1 с кнопкой, которая вызывает форму2. На форме2 есть два чекбокса и кнопка "Сохранить". Подскажите пожалуйста, как правильно выполнить десериализацию (чтение настроек из файла xml) для значений checkBox-ов на второй форме? Код ниже работает правильно только для записи настроек в файл xml.
Класс Props:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
namespace test
{
public class PropsFields
{
public String XMLFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "settings.xml");
public Boolean BoolValue1 = true;
public Boolean BoolValue2 = true;
}
public class Props
{
public PropsFields Fields;
public Props()
{
Fields = new PropsFields();
}
public void WriteXml()
{
XmlSerializer ser = new XmlSerializer(typeof(PropsFields));
TextWriter writer = new StreamWriter(Fields.XMLFileName);
ser.Serialize(writer, Fields);
writer.Close();
}
public void ReadXml()
{
if (File.Exists(Fields.XMLFileName))
{
XmlSerializer ser = new XmlSerializer(typeof(PropsFields));
TextReader reader = new StreamReader(Fields.XMLFileName);
Fields = ser.Deserialize(reader) as PropsFields;
reader.Close();
}
else
{
//можно написать вывод сообщения если файла не существует
}
}
}
}
В первой форме:
namespace test
{
public partial class Form1 : Form
{
Props props = new Props();
//чтение настроек:
private void readSetting()
{
props.ReadXml();
Form2 frm2 = new Form2();
frm2.checkBox1.Checked = props.Fields.BoolValue1;
frm2.checkBox2.Checked = props.Fields.BoolValue2;
frm2.Close();
frm2.Dispose();
}
private void Form1_Load(object sender, EventArgs e)
{
readSetting();
}
private void btn_save_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
if (frm2.ShowDialog(this) == DialogResult.OK)
{
props.Fields.BoolValue1 = frm2.checkBox1.Checked;
props.Fields.BoolValue2 = frm2.checkBox2.Checked;
props.WriteXml();
}
frm2.Close();
frm2.Dispose();
}
При запуске программы вызывайте Settings.Load(), после чего обращайтесь к полям Settings.Current.TestField1
public class Settings
{
private static Settings _Current;
private Settings() { }
public static void SetDefault()
{
_Current = new Settings();
}
public static Settings Current
{
get {
if (_Current == null)
_Current = new Settings();
return _Current;
}
}
public static void Load()
{
if (File.Exists(_SettingsFileName))
{
Stream file = File.Open(_SettingsFileName, FileMode.Open);
XmlSerializer formatter = new XmlSerializer(typeof(Settings));
_Current = (Settings)formatter.Deserialize(file);
file.Close();
}
else
{
SetDefault();
Save();
}
}
public static void Save()
{
Stream file = File.Open(_SettingsFileName, FileMode.Create, FileAccess.Write);
XmlSerializer formatter = new XmlSerializer(typeof(Settings));
formatter.Serialize(file, Current);
file.Close();
}
public static readonly string CurrentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
private static string _SettingsFileName = Path.Combine(CurrentDirectory, "Settings.xml");
public int TestField1 = 32300;
public string TestField2 = "Hello world";
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
мне нужно удалить повторяющиеся элементы, где два параметра равныУдалось удалить элементы, где повторяется только один параметр (Id), вот...
При добавлении\удалении элемента в коллекции, View не отображает изменения количества элементовТак же как и при изменении статуса в вложенном...