Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 6:

Создание оконных приложений Windows Forms

Аннотация: В данной лекции описывается создание, управление и типы оконных приложений.

Все оконные приложения .NET используют класс Form, который размещается в пространстве имен System.Windows.Forms одноименной библиотеки System.Windows.Forms.dll. Приложения, также, часто используют ряд графических возможностей, размещенных в классах библиотечной сборки System.Drawing.dll. Нужна также сборка System.dll.

Создание пустой заготовки оконного приложения

Конечно, оболочка имеет удобные мастера для создания приложений различных типов, но для дальнейшего изучения возможностей языка C# при создании оконных приложений начнем построение кода с нуля.

  • Выполните команду меню File/New/Project и выберите из диалогового окна мастера шаблон Empty Project (пустой проект), а также определите имя проекта MyApp и его размещение в файловой системе компьютера. Проследите, чтобы флаг Create directory for solution был сброшен, иначе будет создан каталог для решения и подкаталог для проекта

Обратите внимание, что панель Solution Explorer не отображает ни одного файла


Обратите, также, внимание, что панель Object Browser уже содержит ссылку на базовую сборку mscorlib.dll ( Microsoft Common Object Runtime Library или Multilanguage Standard Common Object Runtime Library ). Она автоматически подключается к проекту, поскольку содержит базовые типы, необходимые для всех приложений. Наш проект тоже присутствует в этой панели, как будующая сборка, но пока сырая.

  • Командой Project/Add Reference вызовите диалоговое окно оболочки и добавьте к проекту ссылки на библиотечные сборки System.dll, System.Windows.Forms.dll и System.Drawing.dll

Создание экземпляра класса Form

  • Добавьте к проекту пустой файл с именем Program.cs командой Proiect/Add New Item

  • Заполните файл следующим кодом
class EntryPoint
{
    public static void Main()
    {
        // Создание графического окна
        System.Windows.Forms.Form frm = 
            new System.Windows.Forms.Form();
    
        // Задержка консольного окна
        System.Console.ReadLine();
    }
}
Листинг 6.1 . Код файла Program.cs

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

  • Запустите приложение - появится только пустое консольное окно

Консольное окно создается и отображается автоматически, а вот графическое окно мы только создали, но не отобразили.

  • Исправьте код файла Program.cs так
class EntryPoint
{
    public static void Main()
    {
        // Создание и отображение графического окна
        System.Windows.Forms.Form frm = 
            new System.Windows.Forms.Form();
        frm.Text = "Мертвое окно";
        frm.Show();
    
        // Задержка консольного окна
        System.Console.ReadLine();
    }
}
Листинг 6.2 . Код отображения графического окна в файле Program.cs

При запуске приложения мы увидим созданное окно, но оно не будет реагировать на действия пользователя. Более того, чтобы его увидеть, необходимо специально задерживать консольное окно.


Чтобы это исправить, нужно включить окно в цикл сообщений Windows, чтобы ему передавались от системы типовые сообщения, которые передаются любому графическому окну, имеющему фокус ввода.

  • Исправьте код файла Program.cs так
class EntryPoint
{
    public static void Main()
    {
        // Создание и отображение графического окна
        System.Windows.Forms.Form frm = 
            new System.Windows.Forms.Form();
        frm.Text = "Живое окно";
        System.Windows.Forms.Application.Run(frm);
    }
}
Листинг 6.3 . Код графического окна, включенного в цикл сообщений Windows

Теперь мы получили полноценное окно Windows, которое реагирует на действия пользователя, передаваемые ему системой. Специально отображать это окно не нужно. Теперь оно держит приложение до тех пор, пока не будет закрыто либо графическое, либо консольное окно.

Отключение консольного окна

Иметь одновременно с графическим окном консольное очень выгодно на этапе отладки. В консольное окно можно выводить значения переменных также, как без графического окна. Но конечному пользователю нужно поставлять приложение без консольного окна.

  • Отключите консольное окно, вызвав окно свойств проекта командой Project/MyApp Properties и установив опцию Windows Application в списке Output type вкладки Application

Теперь при запуске приложения будет появляться только графическое окно


Это окно имеет по умолчанию стандартный размер 300x300 пикселов, но может настраиваться кодом программы перед его помещением в цикл сообщений системы.

Можно в цикл сообщений поместить сразу ссылку на экземпляр класса Form, возвращаемую оператором new при его создании. Но в этом случае код программы уже не будет иметь доступа к свойствам этого объекта. В приведенном ниже примере создается и настраивается объект на одно окно, а передается в цикл сообщений совершенно другое окно, созданное на лету.

using System;
using System.Windows.Forms;
using System.Drawing;
    
class EntryPoint
{
    public static void Main()
    {
        // Создание и отображение графического окна
        Form frm = new Form();
        frm.Text = "Первое окно";
        Application.Run(new Form());// Новое окно
    }
}
Листинг 6.4 . Явно создаем и настраиваем одно окно, а цикл сообщений получает другое

Теперь на новое окно из кода никак влиять нельзя.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

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

 

Как активировать код?