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(); } }
Пожалуй, это уже успех! Вот как выглядит форма, отображаемая этой программой:
Можно захватить мышью заголовок и перемещать форму по экрану, захватить рамку формы и изменить ее размер, щелкнуть по кнопкам свертывания или развертывания, вызвать системное меню, называемое в 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 | < Назад | Оглавление | Далее > |