сохранить поля формы
От: sagent  
Дата: 26.02.05 18:06
Оценка:
такой вопрос: есть форма, на ней много текстовых полей. нужно при закрытии формы их сохранить. пока вижу решение сделать клас с полями под поля формы, при закрытии формы присвоить значения полей формы полям класса и класс серилизовать(присвоение поэлементно). есть ли другое решение более универсальное(и простое)?
Re: сохранить поля формы
От: Mika Soukhov Stock#
Дата: 26.02.05 19:34
Оценка:
Здравствуйте, sagent, Вы писали:

Чуть модернизируй этот пример http://gzip.rsdn.ru/Forum/Message.aspx?mid=355294
Автор: Andy77
Дата: 15.08.03
и получишь то, что надо (кстати, там есть комментарий как это сделать — Reflection)
сохранить поля формы
От: Аноним  
Дата: 26.02.05 19:57
Оценка: 1 (1)
> такой вопрос: есть форма, на ней много текстовых полей. нужно при закрытии формы их сохранить

Надо реализовать в форме интерфейс IXmlSerializable и переопределить метод OnClosing.

Легко можно будет получить, например, вот такой xml.

<SerializableForm size="{Width=300, Height=300}">
<textbox index="1">textbox text 0</textbox>
<textbox index="2">textbox text 1</textbox>
<textbox index="3">textbox text 2</textbox>
<textbox index="4">textbox text 3</textbox>
<textbox index="5">textbox text 4</textbox>
</SerializableForm>

// Реализуем интерфейс
public class SerializableForm : Form, IXmlSerializable
{
#region IXmlSerializable Members
System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
{
return null;
}
void IXmlSerializable.ReadXml(XmlReader reader)
{
// восстановление
// ...
}

// полный контроль над сериализацией
void IXmlSerializable.WriteXml(XmlWriter writer)
{
// свойства формы сохраним как аттрибуты
writer.WriteAttributeString("size", this.Size.ToString());

// для каждого TextBox ...
foreach (Control c in this.Controls)
{
TextBox tb = c as TextBox;
if (tb != null)
{
writer.WriteStartElement("textbox");
writer.WriteAttributeString("index", this.Controls.GetChildIndex(tb).ToString());
writer.WriteString(tb.Text);
writer.WriteEndElement();
}
}
}
#endregion

protected override void OnClosing(CancelEventArgs e)
{
// Вызов сериализации формы
StreamWriter sw = new StreamWriter("Form.xml");
try
{
XmlSerializer xs = new XmlSerializer(this.GetType());
xs.Serialize(sw, frm);
}
finally
{
sw.Close();
}
base.OnClosing(e);
}
}



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: сохранить поля формы
От: Аноним  
Дата: 26.02.05 19:58
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, sagent, Вы писали:


MS>Чуть модернизируй этот пример http://gzip.rsdn.ru/Forum/Message.aspx?mid=355294
Автор: Andy77
Дата: 15.08.03
и получишь то, что надо (кстати, там есть комментарий как это сделать — Reflection)


не совсем понял пример. вот что понял-идея это передать текущую форму в сериализатор чтобы тот сохранил значения текстовых полей. так? с рефлекшином не работал-подозреваю с его помощью отбирать на сериализацию токо текстбокс? вот не знаю как реализовать.
Re[2]: сохранить поля формы
От: Аноним  
Дата: 26.02.05 20:11
Оценка:
В примере постом выше именно эта реализация.
С уважением, Дмитрий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: сохранить поля формы
От: Аноним  
Дата: 01.03.05 10:22
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Здравствуйте, sagent, Вы писали:


MS>Чуть модернизируй этот пример http://gzip.rsdn.ru/Forum/Message.aspx?mid=355294
Автор: Andy77
Дата: 15.08.03
и получишь то, что надо (кстати, там есть комментарий как это сделать — Reflection)


народ нет ли у кого уже готового кода для сохранения всех полей на форме??? прошу помочь
Re[3]: сохранить поля формы
От: _den  
Дата: 01.03.05 10:44
Оценка:
Если не хочешь возиться с сериализацией, и у тебя фиксированное количество полей (я к тому что, этот вариан не очень гибкий), то можешь сделать передачу параметров с помошью делегата. (те если грубо говоря когда форма отработает, вызвать метод родительского класса и передать ему все необходимое, в удобной для тебя форме). Только тут надо быть аккуратным что бы не заблокировать закравающийся поток формы.
... << RSDN@Home 1.1.3 stable >>
Re: сохранить поля формы
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.03.05 11:19
Оценка:
Здравствуйте, sagent, Вы писали:

S>такой вопрос: есть форма, на ней много текстовых полей. нужно при закрытии формы их сохранить.


Наверное имеет смысл создать структуру, хранящую содержимое этих полей и привязать ее к элементам управления стандартным байндингом.
... << RSDN@Home 1.1.4 beta 4 rev. 350>>
AVK Blog
Re[2]: сохранить поля формы
От: Варвар США  
Дата: 07.03.05 12:09
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, sagent, Вы писали:


S>>такой вопрос: есть форма, на ней много текстовых полей. нужно при закрытии формы их сохранить.


AVK>Наверное имеет смысл создать структуру, хранящую содержимое этих полей и привязать ее к элементам управления стандартным байндингом.


И при закрытии этой формы сериализовывать объект этой структуры. То как объект будет сериализовыватся можно сконфигурировать атрибутами. Тогда и не нужно будет имплементировать IXmlSerializable в форме как тут кто-то предлогал.
И вместо сердца каменный топор...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.