Сохранение данных формы в приложениях форм Win

2

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

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

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

Теги:
winforms

6 ответов

2
Лучший ответ

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

  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);
  • 0
    Вы должны использовать с помощью.
  • 0
    Я второй использовать "использование"
Показать ещё 2 комментария
2

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

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

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

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

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

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

I благоприятствует 2) + свойствам

  • 0
    так что перехватывать событие close и скрывать его отменяет нормальное поведение и мешает его утилизации?
  • 0
    если вы закроете его, он не будет утилизирован, только когда он выйдет из области видимости
Показать ещё 1 комментарий
1

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

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

MyDataObject data;
using (var form = new SomeForm() ) {
  var dialogResult = form.ShowDialog(someWindow);
  data = form.InterestingData;
}
1

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

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

Маттиас

0

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

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

2) Если данные сопоставляются с объектом (скажем, "Клиент" )... задают свойства объекта. Если нет, просто выведите все управляющие данные с помощью свойства, обработав все необходимые формации.

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

4) В вашей родительской форме проверьте, если dialog.ShowDialog() == DialogResult.OK и просто получите доступ к общедоступным свойствам, которые вы создали на шаге 2... или если вы загружаете объект с информацией, просто получившим доступ к этому объекту в форма (также по свойству)

5) THEN вызовите метод dialog.Dispose()... либо пользователь нажал кнопку "ОК" или "Отмена".

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню