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

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

using System;
using System.Windows.Forms;
using System.Drawing;
using DialogBox;
    
namespace MyApp
{
    class GeneralForm : Form // Наследуем библиотечному классу
    {
        ModelessDialogBox dlg = null;// Храним ссылку на окно
        Random rnd = new Random();// Поле
    
        // Конструктор с настройками
        public GeneralForm()
        {
            // Начальная настройка окна
            this.Text = "С немодальным окном";
            this.StartPosition = FormStartPosition.CenterScreen;
    
            // Создание и настройка объекта кнопки
            Button btn = new Button(); // Кнопка вызова диалогового окна
            btn.Parent = this;  // Назначаем родителя
            btn.Text = "Изменить цвет";// Надпись на кнопке
            btn.AutoSize = true;// Подгонять размер под надпись
            int left = (this.ClientSize.Width - btn.Width) / 2;
            int top = this.ClientSize.Height - 2 * btn.Height;
            btn.Location = new Point(left, top); // Координаты привязки
            // Подписываемся на событие
            btn.Click += ButtonOnClick;
    
            // Автоматическое масштабирование под конкретное разрешение
            this.AutoScaleDimensions = new Size(96, 96);
            this.AutoScaleMode = AutoScaleMode.Dpi;
        }
    
        // Обработчик создает диалоговое окно
        void ButtonOnClick(object sender, EventArgs e)
        {
            // Создать диалоговое окно
            if (dlg == null)
                dlg = new ModelessDialogBox();
    
            // Назначить владельца и расположить поверх окна приложения
            dlg.Owner = this;
            // Слушать события диалогового окна
            dlg.Change += new EventHandler(DialogOnChange);
            dlg.DialogClosed += DialogOnClosed;
            // Отобразить диалоговое окно
            dlg.Show();
        }
    
        void DialogOnChange(object sender, EventArgs e)
        {
            // Приводим тип переданной ссылки,
            // адресующей объект диалогового окна
            dlg = (ModelessDialogBox)sender;
    
            // Изменяем цвет главной формы
            if (dlg.GrayShades)
            {
                int iShade = rnd.Next(255);
                this.BackColor = Color.FromArgb( // Только случайный серый
                    iShade,
                    iShade,
                    iShade);
            }
            else
            {
                this.BackColor = Color.FromArgb( // Случайный цветной 
                    rnd.Next(255),
                    rnd.Next(255),
                    rnd.Next(255));
            }
        }
    
        void DialogOnClosed(object sender, EventArgs e)
        {
            dlg = null;
        }
    }
}
Листинг 6.33 . Код файла GeneralForm.cs проекта TestModeless
using System.Windows.Forms;
    
namespace MyApp
{
    class EntryPoint
    {
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new GeneralForm());
        }
    }
}
Листинг 6.34 . Код файла Program.cs проекта TestModeless
  • Выделите по очереди каждый тестовый проект в панели Solution Explorer и к каждому из них командой Project/Add Reference присоедините ссылки на библиотечный сборки
    1. System
    2. System.Drawing
    3. System.Windows.Forms

  • Подобным же образом, но через вкладку Browse, присоедините к тестовым проектам ссылку на нашу библиотеку

После этого дерево решения должно выглядеть так


  • В раскрывающемся списке Solution Configurations

выполните опцию Configuration Manager


и настройте диалоговое окно Configuration Manager так


В окне Configuration Manager мы установили, в каком режиме будут создаваться сборки проектов, входящих в наше решение.

При одновременной отладке библиотечной сборки и тестовых проектов необходимо, чтобы используемая в тестах сборка скомпилировалась раньше самих тестов. Этот порядок можно установить в окне зависимостей проектов Project Dependencies.

  • В панели Solution Explorer вызовите контекстное меню для узла решения и выполните опцию Project Dependencies (зависимости проекта). В появившемся диалоговом окне выберите вкладку Dependencies и установив поочередно в раскрывающемся списке Projects тестовые проекты отметьте для них проект с библиотекой MyLibrary, от которого эти тестовые проекты зависят

  • Переключитесь на вкладку Build Order, чтобы проверить порядок построения проектов оболочкой

Теперь библиотека будет создаваться раньше, чем использоваться.

Если решение состоит из нескольких проектов, оболочка Visual Studio 2005 будет компилировать их все, но запустит на выполнение только один проект. Этот стартовый проект выделяется в панели Solution Explorer жирным заголовком. Любой проект решения можно сделать стартовым, если его выделить и выполнить команду Project/Set as StartUp Project (или через контекстное меню узла проекта). То же самое можно сделать с помощью диалогового окна, вызвав его одноименной командой через контекстное меню узла решения.


Учитывая, что библиотечную сборку MyLibrary мы уже скомпилировали ранее, давайте вообще исключим ее из решения, сделав недоступной для оболочки.

  • В панели Solution Explorer для узла проекта MyLibrary выполните команду контекстного меню Unload Project

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

  • В панели Solution Explorer последовательно для проектов TestModal и TestModeless выполните опцию Properties контекстное меню и во вкладке Application установите раскрывающийся список Output type в значение Windows Application

  • В панели Solution Explorer выделите узел проекта TestModal и, выполнив команду Project/Set as StartUp Project (или через контекстное меню узла проекта), назначьте его стартовым. Запустите решение и получите результат

  • В панели Solution Explorer выделите узел проекта TestModeless и, выполнив команду Project/Set as StartUp Project (или через контекстное меню узла проекта), назначьте его стартовым. Запустите решение и получите результат

Обратите внимание, что при компиляции тестовых проектов, использующих DLL -библиотеку MyLibrary, оболочка автоматически скопировала файл с MyLibrary.dll в один каталог с исполнимой сборкой соответствующего теста. Необходимые для работы исполнимого файла DLL -библиотеки должны находиться с ним в одном каталоге или в системном каталоге, где их и будет искать операционная система, если не найдет в текущем.

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

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

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

 

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