|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Создание оконных приложений Windows Forms
Упаковка классов пользователя в DLL - библиотеки
Динамически подключаемые библиотеки ( DLL - Dynamic Link Library ) являются наилучшим способом упаковки отлаженного и откомпилированного кода, который может вызываться приложением по мере необходимости. Сейчас в Visual Studio 2005 это сделать очень просто, стоит лишь установить командой Project/Properties/Application опцию Output type=Class Lybrary в свойствах проекта.
В прошлом упражнении мы создали немодальное диалоговое окно с именем класса ModelessDialogBox, еще раньше был создан код модального диалогового окна ModalDialogBox. Оба окна применялись для изменения цвета главной формы приложения. Попробуем упаковать эти классы в библиотечную динамическую сборку MyLibrary в пространстве имен DialogBox. Попутно рассмотрим работу оболочки, когда решение содержит несколько проектов.
-
С помощью команды меню File/New/Project вызовите окно мастера создания новых проектов и заполните его так
Мастер создаст необходимые вспомогательные файлы решения и проекта и разместит их в цепочке каталогов
-
В панели Solution Explorer вызовите контекстное меню для узла проекта MyLibrary и выберите опцию Properties
-
Настройте вкладку Application как показано на снимке
Теперь при добавлении файлов в проект оболочка по умолчанию будет упаковывать код в пространство имен DialogBox и при компиляции создавать сборку DLL с именем MyLibrary.
-
Командой Project/Add Reference вызовите диалоговое окно оболочки и добавьте к проекту ссылки на библиотечные сборки System.dll, System.Windows.Forms.dll и System.Drawing.dll
-
Добавьте к проекту два пустых файла с любым именем командой Proiect/Add New Item
-
Скопируйте в них коды классов модального и немодального диалоговых окон, разработанные нами ранее, измените модификаторы доступа классов на public и объявление пространства имен на DialogBox
Объявление классов общедоступными требуется для того, чтобы они были видимы коду, расположенному в других сборках. Собственно, для библиотечных классов, которые предполагается использовать из внешних сборок, это требование характерно всегда.
using System;
using System.Windows.Forms;
using System.Drawing;
namespace DialogBox
{
public class ModalDialogBox : Form
{
// Локальное поле ссылки на флажок
CheckBox cbGrayShades;
// Конструктор
public ModalDialogBox()
{
// Настройка диалогового окна
// Заголовок назначения окна
this.Text = "Цвет формы";
// Неизменяемый размер
this.FormBorderStyle = FormBorderStyle.FixedDialog;
// Отключим все системные кнопки в заголовке окна
this.ControlBox = false; // Значок слева и кнопка закрытия справа
this.MinimizeBox = false;// Кнопка свертывания
this.MaximizeBox = false;// Кнопка развертывания
// Не отображать кнопку в панели задач
this.ShowInTaskbar = false; // Нет внизу экрана
// Появление формы при каждом запуске
// определяется нами свойством Location
this.StartPosition = FormStartPosition.Manual;
// Размер клиентской области окна
this.ClientSize = new Size(144, 56);
// Позиция диалогового окна
this.Location =
ActiveForm.Location // Координаты вызывающего окна
// Добавляем сдвиг вправо-вниз относительно вызывающего окна
+ SystemInformation.CaptionButtonSize // Размер надписи кнопки
+ SystemInformation.FrameBorderSize; // Толщина рамки
// Создаем и настраиваем флажок
// Создали объект
cbGrayShades = new CheckBox();
// Назначили родителя
cbGrayShades.Parent = this;
// Смысловая надпись для включенного состояния
cbGrayShades.Text = "Только случайный серый";
// Привязка левого-верхнего угла относительно родителя
int left, top; // Вспомогательные переменные
left = 16; top = 8;
cbGrayShades.Location = new Point(left, top);
// Ширина - высота в пикселах
cbGrayShades.Size = new Size(this.ClientSize.Width - left - 4, 12);
// Создаем и настраиваем две кнопки
Button btn = new Button();
btn.Parent = this;
btn.Text = "OK";
btn.Location = new Point(16, 32);// Копируем значение структуры
btn.Size = new Size(48, 14);// Копируем значение структуры
btn.DialogResult = DialogResult.OK;// Пометили признаком "ПРИНЯТЬ"
this.AcceptButton = btn; // Закрепили за клавишей Enter, когда в фокусе
btn = new Button(); // Используем ту же ссылочную переменную
btn.Parent = this;
btn.Text = "Cancel";
btn.Location = new Point(80, 32);// Правее первой кнопки
btn.Size = new Size(48, 14);// Тот же размер
btn.DialogResult = DialogResult.Cancel;// Пометили признаком "ОТМЕНИТЬ"
this.CancelButton = btn; // Закрепили за клавишей Esc
// Автоматическое масштабирование под опорный шрифт
this.AutoScaleDimensions = new Size(4, 8);
this.AutoScaleMode = AutoScaleMode.Font;
}
// Для тренировки обертываем открытое свойство
// состояния флажка своим открытым свойством
public bool GrayShades
{
get { return cbGrayShades.Checked; }
set { cbGrayShades.Checked = value; }
}
}
}
Листинг
6.29 .
Код класса ModalDialogBox файла CodeFile1.cs
using System;
using System.Windows.Forms;
using System.Drawing;
namespace DialogBox
{
public class ModelessDialogBox : Form
{
// Локальное поле ссылки на флажок
CheckBox cbGrayShades;
// Объявляем события для главной формы
public event EventHandler Change;
public event EventHandler DialogClosed;
// Конструктор
public ModelessDialogBox()
{
// Настройка диалогового окна
// Заголовок назначения окна
this.Text = "Цвет формы";
// Неизменяемый размер
this.FormBorderStyle = FormBorderStyle.FixedDialog;
// Отключим все системные кнопки в заголовке окна
this.MinimizeBox = false;// Кнопка свертывания
this.MaximizeBox = false;// Кнопка развертывания
// Не отображать кнопку в панели задач
this.ShowInTaskbar = false; // Нет внизу экрана
// Появление формы при каждом запуске
// определяется нами свойством Location
this.StartPosition = FormStartPosition.Manual;
// Размер клиентской области окна
this.ClientSize = new Size(144, 56);
// Позиция диалогового окна
this.Location =
ActiveForm.Location // Координаты вызывающего окна
// Добавляем сдвиг вправо-вниз относительно вызывающего окна
+ SystemInformation.CaptionButtonSize // Размер надписи кнопки
+ SystemInformation.FrameBorderSize; // Толщина рамки
// Создаем и настраиваем флажок
// Создали объект
cbGrayShades = new CheckBox();
// Назначили родителя
cbGrayShades.Parent = this;
// Смысловая надпись для включенного состояния
cbGrayShades.Text = "Только случайный серый";
// Привязка левого-верхнего угла относительно родителя
int left, top; // Вспомогательные переменные
left = 16; top = 8;
cbGrayShades.Location = new Point(left, top);
// Ширина - высота в пикселах
cbGrayShades.Size = new Size(this.ClientSize.Width - left - 4, 12);
// Создаем и настраиваем две кнопки
Button btn = new Button();
btn.Parent = this;
btn.Text = "OK";
btn.Size = new Size(48, 14);// Размеры кнопки
left = (this.ClientSize.Width - btn.Width) / 2;
btn.Location = new Point(left, 32);// Позиционирование в окне
btn.Click += ButtonOnClick; // Изменить цвет
this.AcceptButton = btn; // Закрепили за клавишей Enter, когда в фокусе
// Автоматическое масштабирование под опорный шрифт
this.AutoScaleDimensions = new Size(4, 8);
this.AutoScaleMode = AutoScaleMode.Font;
}
void ButtonOnClick(object sender, EventArgs e)
{
// Послать сообщение об изменении цвета
if (this.Change != null)
Change(this, new EventArgs());
//Change(this, e);
}
// Для тренировки обертываем открытое свойство
// состояния флажка своим открытым свойством
public bool GrayShades
{
get { return cbGrayShades.Checked; }
set { cbGrayShades.Checked = value; }
}
// Послать сообщение главной форме при закрытии
protected override void OnClosed(EventArgs e)
{
// Аргументы нам не нужны, создаем однотипные затычки
this.DialogClosed(new Object(), new EventArgs());
// Пусть закроется как надо!
base.OnClosed(e);
}
}
}
Листинг
6.30 .
Код класса ModelessDialogBox файла CodeFile2.cs
-
Установите опцию Solution Configurations в значение Release (окончательный вариант) и выполните команду Build/Build MyLibrary





