|
Прошел курс. Получил код 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 .
Пример отношений главной и дочерней форм