Закройте форму окна, не выходя из всего приложения - PullRequest
3 голосов
/ 08 апреля 2011

Окружающая среда

  • Windows XP SP3 x32
  • Visual Studio 2005 Standard
  • Устройство / платформа: Honeywell Dolphin 9500 с Windows Mobile / Pocket PC 2003
  • NET Framework 1.1 и .NET Compact Framework Framework 1.0 SP3

Цель

В настоящее время у меня есть приложение с 3 формами. Первая форма - это что-то вроде заставки, но я еще не решил, будет ли пользователю разрешено ее снова открывать. Вторая форма представляет собой сводный список элементов, которые будут отображаться один за другим в третьей форме.

Я бы хотел иметь возможность открыть первую форму и дождаться нажатия кнопки. Когда эта кнопка нажата, я хотел бы открыть другую форму и избавиться от первой. Как только элемент выбран из списка на втором экране, я хотел бы отобразить третью форму и, возможно, избавиться от второй формы. Пользователь также должен иметь возможность повторно открыть вторую форму, чтобы выбрать другой элемент для отображения в третьей форме. При этом, я, вероятно, не хочу избавляться от второй формы. Тем не менее, на этом устройстве проблема с памятью (64 МБ распределяется между хранилищем и системной памятью), поэтому я хочу распоряжаться вещами, когда могу.


Проблема

Вероятно, вы можете догадаться об этом по названию, но когда я закрываю / удаляю свою первую форму, все приложение закрывается. Теперь, когда я немного ознакомился с этим вопросом, я знаю, что это связано с этой строкой: Application.Run (new Form1 ()); или как там будет названа моя форма.


Вещи, которые я пробовал

  • this.Dispose () - закрывает все приложение
  • this.Close () - закрывает все приложение
  • Я также видел, как несколько человек рекомендовали одному создать экземпляр своей формы (Form f1 = new MyForm ();), показать ее (.Show ();), а затем использовать Application.Run (); без аргументов. Когда я пытаюсь это сделать, я получаю «Нет перегрузки для метода« Выполнить »принимает« 0 »аргументов»
  • ApplicationContext не существует в версии 1.1 .NET Framework

Код

static void Main()
  {
   Application.Run(new Welcome());
  }

  private void btnBegin_Click(object sender, EventArgs e)
  {
   Form wof = new WorkOrderForm();
   wof.Show();
   wof.BringToFront();

   // Here is where I would like to dispose of the Welcome form
  }

Ответы [ 4 ]

3 голосов
/ 08 апреля 2011

Вы можете вызвать Application.Run () со своей «основной» формой, это все равно позволит приложению корректно закрываться при закрытии формы, но скрыть его (Visible = false), пока вы показываете заставку или просто показываетезаставка поверх него.

3 голосов
/ 08 апреля 2011

Создайте скрытую форму, которую вы передаете Application.Run().Когда вы решите, что пора закрывать приложение, закройте эту скрытую форму.

1 голос
/ 08 апреля 2011

Я продолжаю отвечать на свои вопросы ...

Я опубликовал эту идентичную проблему на форумах MSDN, и мне сказали использовать объект ApplicationContext вместо нового объекта Form в качестве параметра в Application.Run. Я собираюсь попробовать это сейчас. Пока я оставлю это без ответа.

РЕДАКТИРОВАТЬ: Ну, я отрекаюсь. Контекст приложения не существует в .NET Framework v1.1

РЕДАКТИРОВАТЬ 2: На самом деле, кажется, что это так (http://msdn.microsoft.com/en-us/library/system.windows.forms.applicationcontext(VS.71).aspx),, однако он не существует в Compact Framework версии 1.0 SP3.

0 голосов
/ 08 апреля 2011

Требуется ли иметь 3 формы?

Один из способов - создать 3 панели в 1 форме и просто показать активную панель.

...