Прошел курс. Получил код 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