Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 6:
Создание оконных приложений Windows Forms
Немодальные диалоговые окна
Теперь, когда мы разобрались с механизмом работы делегатов и событий, посмотрим, как можно разработать свое немодальное диалоговое окно, которое будет общаться с каркасом приложения через события. На главном окне приложения предусмотрим кнопку, запускающую немодальное диалоговое окно. Само диалоговое окно создадим с кнопкой, при щелчке на которой будет генерироваться событие, обрабатываемое в основном окне для изменения его цвета.
Вот код программы
using System; using System.Windows.Forms; using System.Drawing; namespace MyApp { 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.26 . Код файла ModelessDialogBox.cs немодального диалогового окна
using System; using System.Windows.Forms; using System.Drawing; 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.27 . Код файла GeneralForm.cs главного окна приложения
using System.Windows.Forms; namespace MyApp { class EntryPoint { public static void Main() { Application.EnableVisualStyles(); Application.Run(new GeneralForm()); } } }Листинг 6.28 . Код файла Program.cs