Сохранение данных формы в приложениях форм Win - PullRequest
2 голосов
/ 05 марта 2009

В приложении Winforms C # как обычно сохранять данные в форме, открываемой другой формой? Я планировал просто сохранить все это на объекте формы, но когда форма закрыта, кажется, что этот объект формы удален. это означает, что я теряю все данные.

Я мог бы обернуть форму в другой объект, который снимает с него все данные, но это кажется большой работой.

Есть ли способ просто скрыть форму, когда она закрыта, а не утилизировать ее?

Ответы [ 6 ]

2 голосов
/ 05 марта 2009

При закрытии форма не утилизируется. Как правило, это то, как данные управляются.

  Result res;
  using (MyForm form = new MyForm())
  {
      if(form.ShowDialog()== DialogResult.OK) 
      {
         // In Myform, after the data collection is done, you can set  DialogResult=DialogResult.Ok and close form using form.Close(); 
         res = form.Result; // expose forms data as result.                              
      }
  }
  UserResult(res);
2 голосов
/ 05 марта 2009

Использование общедоступных свойств.

  • Перед закрытием заполните эти свойства соответствующими значениями (т.е. this._userName = txtUsername.Text)
  • Закрыть форму
  • В родительском объекте формы вы все равно можете вызвать dialog.Username для чтения значений.
2 голосов
/ 05 марта 2009

2 возможности:

1) поймать событие закрытия и просто спрятать его. Создайте функции (в скрытой форме) для получения входных значений, используя свойства.

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    this.Visible = false;
    e.Cancel = true;
}

2) И что говорит Мой: если вы закроете форму после того, как создали ее, объект формы все еще будет жив и может быть доступен

Я предпочитаю 2) + свойства

1 голос
/ 05 марта 2009

Вы могли бы скрыть форму против ее утилизации, но это почти наверняка не то, что вы хотите. Формы занимают ресурсы в процессе, которые не будут освобождены, если вы просто скроете форму. Они только уйдут, если вы избавитесь от этого. Держать кучу экземпляров Form, когда они не используются, просто просит проблемы позже в будущем.

То, что вы, вероятно, захотите сделать, - это вернуть некоторые данные результатов из формы после того, как она будет отображена, но до того, как она будет фактически закрыта. Например,

MyDataObject data;
using (var form = new SomeForm() ) {
  var dialogResult = form.ShowDialog(someWindow);
  data = form.InterestingData;
}
1 голос
/ 05 марта 2009

Я рекомендую вам построить отдельный объект, содержащий данные. Вы можете привязать элементы управления формы к ее свойствам очень простым способом (поддерживается дизайнер, код не требуется). Это хранит ваши данные отдельно от формы.

Если вы еще не знаете этот документ: Как: создать простой элемент управления в форме Windows

Matthias

0 голосов
/ 05 марта 2009

Доступ к элементам управления дочерней формы технически возможен, но не является хорошим дизайном. Вот как я это делаю:

1) На кнопке «Принять / Сохранить» вы установите this.DialogResult на «ОК» и получите всю информацию о контроле. На кнопке закрытия или / и событии закрытия установите this.DialogResult на «Отмена»

2) Если данные сопоставлены с объектом (скажем, «Клиент») ... установите свойства объекта. Если нет, просто предоставьте данные каждого элемента управления со свойством, обрабатывая все необходимое форматирование.

3) Закройте форму, используя this.Close();, не удаляйте ее.

4) В родительской форме проверьте, если диалоговое окно. форма (также от объекта недвижимости)

5) ПОТОМ вызовите метод dialog.Dispose() ... либо пользователь нажал ОК, либо Отмена.

Надеюсь, это поможет вам ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...