Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение состояния формы( всех ее элементов ), касается сериализации формы 
:(
    Опции темы
FasterHarder
Дата 1.8.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Всем программистам привет! Respect! В общем нужен совет, как правильнее всего это реализуется на сегодняшний день в мире всеми любимогоsmile программинга. Необходимо сохранить последнее состояние формы перед моментом ее закрытия, чтобы во время повторного/следующего запуска на дисплее визуализировалось состояние формы на момент ее предыдущего закрытия( т е все текстбоксы заполнены какой либо инфой и тому подобное ). Как я понял раньше, делалась запись в БД( например MS SQL Server ) где каждый столбец отвечал за конкретный элемент управления. Может есть какой либо другой способ чтобы реализовать задуманное. Подскажите как быть то?

P.S. возможно это все дело можно сериализовать, но я незнаю, поддерживает ли сериализацию сами формыsmile.
PM MAIL   Вверх
Naum
Дата 1.8.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 1
Всего: 15



Можно свойства элементов формы забиндить на поля Settings.  smile Более вразумительного сейчас ничего сказать не могу. Почитай Managing application settings (MSDN)



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
RWander
Дата 1.8.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



Цитата(FasterHarder @  1.8.2007,  11:48 Найти цитируемый пост)
поддерживает ли сериализацию сами формы.

" в лоб" сериализовать не получится
попробуй написать класс с поддержкой сериализации, которые хранят состояние всех элементов формы



--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
FasterHarder
Дата 1.8.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



RWander, а у вас не получилось написать нечто позволяющее запускать в поток форму. У вас же был подобный вопрос, как вы выкрутились? 
PM MAIL   Вверх
RWander
Дата 1.8.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 4.5.2006
Где: Russia.Udm.Izhevs k

Репутация: нет
Всего: 6



не очень понял, если вы имеете ввиду десериализацию самой формы, то я даже и не пытался это делать.. А в чем собственно проблема? Я же говорю создайте класс с поддержкой сериализации, который содержит поля, отвечающие за определенные состояния контролов, состояние которых вы хотите сохранить. Перед закрытием формы сериализуйте его в файл, а при создании - десериализуйте объект этого класса и присваивайте значению контролов формы соответствующие поля этого объекта.


--------------------
Microsoft Certified Technology Specialist - ASP.NET Applications
PM MAIL   Вверх
tol05
Дата 1.8.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



RWander, а зачем "класс с поддержкой сериализации, который содержит поля, отвечающие за определенные состояния контролов, состояние которых вы хотите сохранить"? Думаю, что это может вызвать проблемы при изменении чего-нибудь на форме в будущем. Название контрола изменилось, количество и т.д. Нужно будет класс синхронизировать с формой постоянно...

FasterHarder, Навскидку я делал бы примерно так:
1. Coздал бы поток, в который нужно серилизовать состояние контрола (допустим, интересуют только TextBox-ы) и назвал бы его serilizeStream, допустим.
2. по закрытию приложения (или по любому другому событию) вызывал бы свой метод, серилизующий котролы формы с кодом наподобие:
Код

...
forearch(Control control in this.Controls)
{
  TextBox tb = control as TextBox;
  if(tb != null) SerilizeTextBox(serilizeStream);
}
...

где SerilizeTextBox(Stream targetStream) твой метод, который как раз и серилизует нужные свойства TextBox-а (текст, к примеру) в целевой поток.
3. При запуске приложения (в InitializeComponent), или по любому другому событию, считывал бы инфу из потока и инициализировал бы текстбоксы формы.

Аналогично можно поступить для любых других контролов. Принцип здесь - в переборе контролов формы и выборе метода серилизации и серилизуемых инфы в зависимости от типа контрола.
Набирал без студии. Могут быть опечатки...


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
FasterHarder
Дата 2.8.2007, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Да, круто tol05. Общая идея понятна. Respect:)).

P.S. почему "добрые люди" из редмонда не сваяли сриализацию непосредственно самой формы, сколько гемороя бы ушло. smile
PM MAIL   Вверх
Naum
Дата 2.8.2007, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 1
Всего: 15



Я не настаиваю, но таки объясните мне, пожалуйста, чем вот это:
Цитата(MSDN)

To add application settings in the Properties window

   1. Select a form or control in the Form Designer; on the View menu, click Properties Window.
   2. In the Properties window, expand the (Application Settings) property (located under the Data node).
   3. Select the (Property Binding) property and click the ellipsis button (...) to open the Application Settings dialog box.
   4. In the Application Settings dialog box, select the property for which you wish to add an application setting.
   5. In the drop-down list for the property, click (New...) to open the New Application Setting dialog box.
   6. In the New Application Setting dialog box, select the Name property and enter a name for the setting. The name cannot contain spaces.
   7. Select the DefaultValue property and enter a default value for the setting.
   8. Select the scope of the setting from the Scope drop-down list. The setting's scope can be Application or User.
   9. To bind the new setting to the property, select it from the drop-down list, then click OK.
      The property binding will be added to the Properties window, and the new setting will be added to the Project Designer. Note that once you have created the setting, you must use the Project Designer to change it.

не подходит для сохранения состояния формы и контролов?


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
archeg
Дата 2.8.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 9
Всего: 27



Цитата(tol05 @  1.8.2007,  20:56 Найти цитируемый пост)
где SerilizeTextBox(Stream targetStream) твой метод, который как раз и серилизует нужные свойства TextBox-а (текст, к примеру) в целевой поток

С помощью Reflection ;) Таким образом даже не привинчиваемся к конкретному Textbox`у - можно сериализировать все)



Цитата(Naum @  2.8.2007,  08:45 Найти цитируемый пост)
Я не настаиваю, но таки объясните мне, пожалуйста, не подходит для сохранения состояния формы и контролов?

Читаем первый пункт:

Цитата(Naum @  2.8.2007,  08:45 Найти цитируемый пост)
. Select a form or control in the Form Designer; on the View menu, click Properties Window

Идея в том чтобы сериализировать все что есть на форме без выбора каждый раз елементов на самой форме. А если добавить что-то новое к форме?? Прийдется еще и дописывать код??

[offtop] tol05, уже приехал?? Как отдохнул? [/offtop]


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Naum
Дата 2.8.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 1
Всего: 15



Цитата(archeg @  2.8.2007,  14:28 Найти цитируемый пост)
А если добавить что-то новое к форме

Тады понятно. :(


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
FasterHarder
Дата 2.8.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Буду эксперементировать со всеми возможными вариантами и задавать более конкретные вопросы. А пока интересовала тока идея.  smile 

ну как отодохнул то tol05? Расскажи, а? smile  smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
tol05
Дата 2.8.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



archeg, 
Цитата(archeg @  2.8.2007,  13:28 Найти цитируемый пост)
С помощью Reflection ;) Таким образом даже не привинчиваемся к конкретному Textbox`у - можно сериализировать все)

 smile ты решил бомбой по блохе ударить? Серилизовать все свойства всех контролов? + Reflection, которую я лично стараюсь не юзать - уж очень долго она работает.
Можно реализовать в форме ISerilizable и ручками прописывать то, что нужно. Это более быстрый и эффективный вариант. Просто я поленился  smile 

 smile респект всем. Отдохнул так, что уже второй день читаю топики и не могу врубиться почти ни в одну тему  smile 
Перехожу в ".Net для новичков", на переподготовку...  smile 




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.