netlib.narod.ru< Назад | Оглавление | Далее >

Это приложение, и мы хотим его запускать

Волшебный метод, который нам нужен, называется Run и входит в состав класса Application пространства имен System.Windows.Forms. Как в случае классов Console и MessageBox, экземпляр класса Application создать нельзя — все члены класса определены как static. Следующая программа создает форму, присваивает значения ее свойствам Text и Visible, а затем вызывает Application.Run.

RunFormBadly.cs

  //----------------------------------------------
  // RunFormBadly.cs (C) 2001 by Charles Petzold
  //----------------------------------------------
  using System.Windows.Forms;

  class RunFormBadly
  {
      public static void Main()
      {
          Form form = new Form();

          form.Text = "Not a Good Idea...";
          form.Visible = true;

          Application.Run();
      }
  }

Пожалуй, это уже успех! Вот как выглядит форма, отображаемая этой программой:


Рис. 2.4.

Можно захватить мышью заголовок и перемещать форму по экрану, захватить рамку формы и изменить ее размер, щелкнуть по кнопкам свертывания или развертывания, вызвать системное меню, называемое в Windows Forms меню управления (control box), щелкнув по значку в левом верхнем углу окна, или щелкнуть по кнопке закрытия в правом верхнему углу, чтобы закрыть окно.

Но есть тут и один очень серьезный недостаток, который вы, верно, уже заметили: при закрытии формы не происходит возврата из метода Application.Run, и программа остается запущенной, хотя ее форма невидима. Это еще больше бросается в глаза, если программа скомпилирована как консольное приложение: после закрытия окна программы в окне командной строки не появляется знакомое сообщение «Press any key to continue». Для завершения программы можно нажать комбинацию клавиш Ctrl+C. Если программа не компилировалась как консольное приложение, можно вызвать Task Manager (Диспетчер задач), перейти на вкладку Processes (Процессы), найти приложение RunFormBadly и завершить его вручную. (Вот и еще одна веская причина компилировать программу как консольное приложение: можно завершить программу, нажав Ctrl+C.)

Вот более правильный способ вызова метода Application.Run. Ему в качестве параметра передается объект типа Form.

RunFormBetter.cs

  //-----------------------------------------------
  // RunFormBetter.cs (C) 2001 by Charles Petzold
  //-----------------------------------------------
  using System.Windows.Forms;

  class RunFormBetter
  {
      public static void Main()
      {
          Form form = new Form();

          form.Text = "My Very Own Form";

          Application.Run(form);
      }
  }

Заметьте: в этой версии нет ни вызова Show, ни присваивания значения свойству Visible. Форма автоматически делается видимой методом Application.Run. Кроме того, при закрытии формы, передаваемой методу в качестве параметра, Аррliсаtion.Run возвращает управление методу Main, и программа нормально завершает работу.

Программистам, имеющим опыт работы с Win32 API, скорее всего известно, что Application.Run вводит программу в цикл обработки сообщений и что для формы, передаваемой в качестве параметра, имеется код, отправляющий в цикл сообщение выхода при закрытии формы. Так что Application.Run — это то, что делает программу настоящим Windows-приложением.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz