Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Классы Application и Form
Отображение простой формы
Создадим в функции Main объект формы и отобразим его с помощью следующего кода
using System; namespace FirstProject { public class ShowForm { public ShowForm() { } static void Main() { System.Windows.Forms.Form frm; frm = new System.Windows.Forms.Form(); frm.Show(); frm.Text = "Ждем 5 секунд"; System.Threading.Thread.Sleep(5000); frm.Text = "Ждем еще 5 секунд"; System.Threading.Thread.Sleep(5000); } } }Листинг 12.10 . Код создания и отображения формы
Здесь мы применили для фиксации формы статический метод Sleep класса потока Thread.Sleep(), приостанавливающий выполнение потока (программы, загруженной в оперативную память) на указанное в аргументе количество миллисекунд. Обратите внимание, форма есть, но она не получает фокуса ввода и с ней ничего нельзя сделать.
Использование статического метода класса Application
Чтобы оживить форму, ее нужно включить в поток как управляемую циклом сообщений Windows. Дополним код статическим методом класса System.Windows.Forms.Application
using System; namespace FirstProject { public class ShowForm { public ShowForm() { } static void Main() { System.Windows.Forms.Form frm; frm = new System.Windows.Forms.Form(); frm.Show(); frm.Text = "Ждем 5 секунд"; System.Threading.Thread.Sleep(5000); frm.Text = "Ждем еще 5 секунд"; System.Threading.Thread.Sleep(5000); frm.Text = "Находимся в цикле сообщений"; System.Windows.Forms.Application.Run(); } } }Листинг 12.11 . Код формы с циклом сообщений
Запустите приложение и убедитесь, что при закрытии формы консольное окно не закрывается. Это потому, что мы неправильно применили метод Run. При таком подходе форма считается дочерней по отношению к родительскому консольному окну, поскольку приложение объявлено как консольное. Объект формы нужно включить в метод Run как параметр. Новый код
static void Main() { System.Windows.Forms.Form frm; frm = new System.Windows.Forms.Form(); frm.Text = "Находимся в цикле сообщений"; System.Windows.Forms.Application.Run(frm); }Листинг 12.12 . Включение объекта формы как параметра метода Run()
Теперь нет необходимости специально рисовать форму методом Show() и при закрытии форма отправляет в главный цикл процесса сообщение о завершении приложения, поэтому закрываются оба окна.
Добавление пространств имен для сокращения имен классов
Добавим в начало файла пространства имен, чтобы в именах файлов не указывать полные пути. Ненужное пространство имен пока закомментируем.
using System; using System.Windows.Forms; // using System.Drawing;
Код проекта будет выглядеть так
using System; using System.Windows.Forms; //using System.Drawing; namespace FirstProject { public class ShowForm { public ShowForm() { } static void Main() { Form frm; frm = new Form(); frm.Text = "Находимся в цикле сообщений"; Application.Run(frm); } } }Листинг 12.13 . Код проекта с сокращенными именами классов
Пример с двумя формами: свободной и в цикле сообщений
В приложении должен быть только один главный цикл сообщений. Форма, которая включена в главный цикл сообщений, считается родительской и при закрытии закрывает все формы, созданные в приложении. Форма, которая создана вне цикла сообщений, считается дочерней и закрывает только саму себя.
using System; using System.Windows.Forms; //using System.Drawing; namespace FirstProject { public class ShowForm { public ShowForm() { } static void Main() { Form child = new Form(); // Ребенок child.Text = "Дочерняя форма"; child.Show(); Form parent = new Form(); // Родитель parent.Text = "Главная форма (в цикле сообщений)"; Application.Run(parent); MessageBox.Show("Цикл сообщений формы завершен." + "\nУправление передано функции Main()", "Информационное окно MessageBox", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }Листинг 12.14 . Пример отношений главной и дочерней форм