У меня есть сборка, которая содержит несколько UserControl
объектов, которые я хочу сохранить / загрузить через пользовательский интерфейс приложения.Для этого каждый элемент управления реализует интерфейс ISerializable
для настройки полей, которые необходимо сохранить.
Вот упрощенная версия этой библиотеки:
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
использует правильный экземпляр.
Что я делаю неправильно, и как я могу исправить пользовательский интерфейс для отображения правильного (обновленного) значения?
РЕДАКТИРОВАТЬ: Кроме того, обратите внимание, что мне нужно обрабатывать несколько файлов конфигурации, чтопользователь должен иметь возможность сохранять / загружать в / из пути по своему выбору