|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Лекция 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