У меня есть сборка, содержащая несколько объектов UserControl
, которые я хочу иметь возможность сохранять / загружать через пользовательский интерфейс приложения. Для этого каждый элемент управления реализует ISerializable
inter лицом, чтобы настроить поля, которые они должны сохранить.
Вот упрощенная версия этой библиотеки:
namespace LibraryProject
{
using System;
using System.Runtime.Serialization;
using System.Windows.Forms;
[Serializable]
public partial class UserControl1 : UserControl, ISerializable
{
public UserControl1()
{
InitializeComponent();
}
public UserControl1(SerializationInfo info, StreamingContext ctxt)
: this()
{
this.checkBox1.Checked = info.GetBoolean("Checked");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Checked", this.checkBox1.Checked);
}
}
}
Клиентское приложение создает экземпляры нескольких из этих элементов управления и позволяет пользователю сохранять / загружать различные конфигурации UserControl
. Вот упрощенная версия приложения:
namespace ApplicationProject
{
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
using System.Windows.Forms;
using LibraryProject;
public partial class Form1 : Form
{
private const string filename = @"test.xml";
//int hash1;
//int hash2;
public Form1()
{
InitializeComponent();
//hash1 = this.ctrl1.GetHashCode();
}
private void SaveClick(object sender, EventArgs e)
{
using (var stream = File.Open(filename, FileMode.Create))
{
var formatter = new SoapFormatter();
formatter.Serialize(stream, this.ctrl1);
}
}
private void LoadClick(object sender, EventArgs e)
{
using (var stream = File.Open(filename, FileMode.Open))
{
var formatter = new SoapFormatter();
this.ctrl1= (UserControl1)formatter.Deserialize(stream);
}
//hash2 = this.ctrl1.GetHashCode();
}
}
}
На SaveClick
значения правильно сохраняются в файл.
На LoadClick
CheckBox.Checked
правильно обновляется в списке наблюдения отладчика, но пользовательский интерфейс не отражает новое значение.
Я попытался добавить вызовы к ] Refresh ()
, Invalidate ()
, Update ()
, но ничего не работает.
Как и ожидалось, hash1
и ] hash2
отличаются, но Form1
использует правильный экземпляр.
Что я делаю не так и как мне исправить пользовательский интерфейс, чтобы отображалось правильное (обновленное) значение?
РЕДАКТИРОВАТЬ: Также обратите внимание, что мне нужно обрабатывать несколько файлов конфигурации, и пользователь должен иметь возможность сохранить / загрузить в / из пути по ее выбору