Сериализация контролов на форме, либо же сериализация формы в XML C#
//сохранение в XML
void СохранитьToolStripMenuItem1_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "Test files (.xml)|*.xml";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.InitialDirectory = ".";
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.FileName = "Test";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
Stream myStream = null;
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
SoapFormatter myXMLFormat = new SoapFormatter();
MyClass myXML = new MyClass();
myXMLFormat.Serialize(myStream,myXML);//вот тут и возникает проблемма если к примеру myXML имеет тип Form или же Panel
myStream.Close();
}
}
}
//меню открыть из XML
private void ОткрытьToolStripMenuItem1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "Test files (.xml)|*.xml";
openFileDialog1.FilterIndex = 1;
openFileDialog1.InitialDirectory = ".";
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Stream myStream = null;
if ((myStream = openFileDialog1.OpenFile()) != null)
{
SoapFormatter myXMLFormat = new SoapFormatter();
MyClass myCar = (MyClass)myXMLFormat.Deserialize(myStream);
myStream.Close();
}
}
}
Класс Который прокатывет присериализации в примере
[Serializable]
public class MyClass
{
//MyClass Mxx = new MyClass();
public int ID;
public DateTime Date;
public string Text;
// public Control val_control; а так уже не катит
}
Если для сохранения некоторых параметров котролов (положение например), то всегда можно сделать это самостоятельно. Обычно нужно сохранить положение и видимость/невидимость известного (и очень ограниченного) количества компонент.
Во всяком случае можно реализовать интерфейс ISerializable и записать нужные параметры вручную (или записать объект-заглушку), для этого нужно написать реализацию метода GetObjectData.
Спасибо за совет!Данную проблему я решил через созданный класс контейнер в который заганяються параметры контрола:)