|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 16:
Динамическая компоновка формы
Класс самого диалогового окна выбора шрифта NewFontDialog
Теперь скомпонуем все необходимые элементы на форме, которая будет представлять наше диалоговое окно NewFontDialog выбора шрифта. Код можно разместить в отдельном одноименном файле NewFontDialog.cs
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
// Расширяем библиотечный класс Form
class NewFontDialog : Form
{
// Видимые поля-ссылки
ComboBox comboFont;// Для списка "Шрифт:"
ComboBox comboSize;// Для списка "Размер:"
StyleComboBox comboStyle;// Для нашего списка "Начертание:"
// Для флажков "Зачеркнутый" и "Подчеркнутый"
CheckBox checkStrikeout, checkUnderline;
ColorComboBox comboColor;// Для нашего списка "Цвет:"
// Для надписей "Цвет:" и "Набор символов:"
Label labelColor, labelSample;
public NewFontDialog()// Конструктор диалогового окна
{
// Определяем стиль формы как диалоговое окно
// с фиксированными размерами
this.FormBorderStyle = FormBorderStyle.FixedDialog;
// Отключаем системные кнопки
this.MinimizeBox = this.MaximizeBox = false;
// Не отображать в панели задач Windows
this.ShowInTaskbar = false;
this.Text = "Шрифт (самодельный диалог)";
// Подстраиваться под содержимое
this.AutoSize = true;
// Создаем и настраиваем объект панели табличной компоновки
TableLayoutPanel table = new TableLayoutPanel();
table.Parent = this;// Привязали к форме
table.AutoSize = true;// Подстраиваться под содержимое
table.RowCount = 3; // Количество строк таблицы
table.ColumnCount = 4; // Количество столбцов таблицы
// Задаем отступы содержимого ячеек от краев ячеек, равные
// высоте установленного в базовом классе Form шрифта
table.Padding = new Padding(base.Font.Height);
// ***** Заполняем три ячейки верхней строки таблицы *****
Label lbl = new Label();
lbl.Text = "Шрифт:";
lbl.AutoSize = true;// Подстроиться под текст
table.Controls.Add(lbl, 0, 0);// Отдали ячейке (col, row)
lbl = new Label();
lbl.Text = "Начертание:";
lbl.AutoSize = true;// Подстроиться под текст
table.Controls.Add(lbl, 1, 0);// Отдали ячейке (col, row)
lbl = new Label();
lbl.Text = "Размер:";
lbl.AutoSize = true;// Подстроиться под текст
table.Controls.Add(lbl, 2, 0);// Отдали ячейке (col, row)
// ***** Заполняем три ячейки средней строки таблицы *****
// Заполняем ячейку с наименованиями шрифтов
comboFont = new ComboBox();
comboFont.DropDownStyle = ComboBoxStyle.Simple;// Простой список
// Привязать к верхней и нижней границам ячейки
//comboFont.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
comboFont.Dock = DockStyle.Fill;// Распахнуть на всю ячейку
// Подписываемся на событие выбора и регистрируем общий обработчик
comboFont.TextChanged += new EventHandler(combo_Changed);
// Заполняем поля списка именами семейства шрифтов
foreach (FontFamily font in FontFamily.Families)
{
comboFont.Items.Add(font.Name);
}
// Позиционируем поле на текущий базовый шрифт
comboFont.SelectedItem = base.Font.FontFamily.Name;
table.Controls.Add(comboFont, 0, 1);// Отдали ячейке (col, row)
// Заполняем ячейку списка стилей
comboStyle = new StyleComboBox();// Наш класс
comboStyle.DropDownStyle = ComboBoxStyle.Simple;// Простой список
// Привязать к верхней и нижней границам ячейки
comboStyle.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
// Подписываемся на событие выбора и регистрируем общий обработчик
comboStyle.TextChanged += new EventHandler(combo_Changed);
// Принудительно вызываем обработчик
// combo_Changed(comboStyle, new EventArgs());
table.Controls.Add(comboStyle, 1, 1);
// Отдали ячейке (col, row)
// Заполняем ячейку списка выбора размеров шрифта
comboSize = new ComboBox();
comboSize.DropDownStyle = ComboBoxStyle.Simple;// Простой список
// Привязать к верхней и нижней границам ячейки
comboSize.Anchor = AnchorStyles.Top | AnchorStyles.Bottom;
comboSize.Width = 5 * base.Font.Height;// Ширина
// Подписываемся на событие выбора и регистрируем общий обработчик
comboSize.TextChanged += new EventHandler(combo_Changed);
// Заполняем поля списка стандартными размерами шрифтов
for (int i = 8; i < 12; i++)
comboSize.Items.Add(i);
for (int i = 12; i < 30; i += 2)
comboSize.Items.Add(i);
for (int i = 36; i <= 72; i += 12)
comboSize.Items.Add(i);
comboSize.SelectedIndex = 0;// Выделяем первое поле списка
table.Controls.Add(comboSize, 2, 1);// Отдали ячейке (col, row)
// ***** Заполняем три ячейки последней строки таблицы *****
// Создаем экземпляр нашей ранее созданной рамки GroupPanel
GroupPanel groupPanel = new GroupPanel();
groupPanel.Text = "Видоизменение";
table.Controls.Add(groupPanel, 0, 2);// Отдали ячейке (col, row)
// Размещаем в панели GroupPanel флажок "Зачеркнутый"
checkStrikeout = new CheckBox();
checkStrikeout.Text = "Зачеркнутый";
checkStrikeout.AutoSize = true;
// Подписываем на событие анонимный обработчик, вызывающий
// наш метод модификации текущего стиля в списке новым атрибутом
checkStrikeout.Click += delegate { ShowNewFont(); };
checkStrikeout.Parent = groupPanel;// Отдали панели
// Размещаем в панели GroupPanel флажок "Подчеркнутый"
checkUnderline = new CheckBox();
checkUnderline.Text = "Подчеркнутый";
checkUnderline.AutoSize = true;
checkUnderline.Click += delegate { ShowNewFont(); };
checkUnderline.Parent = groupPanel;// Отдали панели
// Размещаем в панели GroupPanel текстовую метку "Цвет:"
labelColor = new Label();
labelColor.Text = "Цвет:";
labelColor.AutoSize = true;
labelColor.Visible = false;// Вначале отключили
checkUnderline.Parent = groupPanel;// Отдали панели
// Размещаем в панели GroupPanel поле со списком цветов
comboColor = new ColorComboBox();
comboColor.Anchor = AnchorStyles.Bottom;
// Подписываемся на события выбора и программного
// изменения названия цвета и регистрируем общий обработчик
comboColor.SelectedValueChanged += new EventHandler(combo_Changed);
comboColor.Visible = false;// Вначале отключили
comboColor.Parent = groupPanel;// Отдали панели
// Заполняем ячейку таблицы для размещения образца
groupPanel = new GroupPanel();// Рамка
groupPanel.Text = "Образец";
table.Controls.Add(groupPanel, 1, 2);// Отдали ячейке (col, row)
// Объединяем две средних ячейки последней строки
table.SetColumnSpan(groupPanel, 2);
groupPanel.Dock = DockStyle.Top;// Привязать к ячейке сверху
// Сам образец
labelSample = new Label();
labelSample.Text = "AaBbБбФф";
labelSample.Font = base.Font;// Шрифт от формы
// Текст размещать в середине текстовой метки
labelSample.TextAlign = ContentAlignment.MiddleCenter;
labelSample.BorderStyle = BorderStyle.Fixed3D;// Рельефно
int width = groupPanel.Width - 2 * base.Font.Height;// Отнимаем Padding
labelSample.Size = new Size(width, 3 * base.Font.Height);
labelSample.Parent = groupPanel;// Отдали рамке
// Создаем кнопки в последнем столбце средней строки
// Панель FlowLayoutPanel для кнопок
FlowLayoutPanel flow = new FlowLayoutPanel();
flow.AutoSize = true;
flow.FlowDirection = FlowDirection.TopDown;// Перетекать сверху вниз
table.Controls.Add(flow, 3, 1);// Отдали ячейке (col, row)
// Помещаем в панель кнопку OK
Button btn = new Button();
btn.Text = "OK";
btn.AutoSize = true;
btn.DialogResult = DialogResult.OK;// Для передачи форме
this.AcceptButton = btn;// Для передачи форме
btn.Parent = flow;// Отдали панели
// Помещаем в панель кнопку Cancel
btn = new Button();
btn.Text = "Отмена";
btn.AutoSize = true;
btn.DialogResult = DialogResult.Cancel;// Для передачи форме
this.CancelButton = btn;// Для передачи форме
btn.Parent = flow;// Отдали панели
}
// Назначаем свое свойство Font
new public Font Font
{
// Извлекаем настройки шрифта из образца
get
{
return labelSample.Font;
}
// Препарируем объект Font и полученную информацию
// рассовываем по элементам пользовательского интерфейса
set
{
// Устанавливаем шрифт образца
labelSample.Font = value;
// Позиционируем поле списка шрифтов
comboFont.SelectedItem = value.FontFamily.Name;
// Заполняем список стилей для заданного шрифта
comboStyle.FamilyName = value.FontFamily.Name;
// Позиционируем поле списка стилей
comboStyle.FontStyle = value.Style;
// Включаем флажки, если есть дополнительные стили
checkStrikeout.Checked = (value.Style &
FontStyle.Strikeout) != 0;
checkUnderline.Checked = (value.Style &
FontStyle.Underline) != 0;
// Извлекаем из объекта Font размер шрифта в пунктах
// и сохраняем в списке
comboSize.SelectedItem = value.SizeInPoints;
comboSize.Text = value.SizeInPoints.ToString();
}
}
// Собственное свойство диалогового окна
// Имеет значение текущей установки списка цвета
// Свойство ждет структуру System.Drawing.Color
public Color Color
{
get
{
return comboColor.Color;
}
set
{
comboColor.Color = value;
}
}
// Свойство проверки и управления видимостью
// интерфейсного блока "Цвет:"
public bool ShowColor
{
get
{
// Проверяем видимость
return comboColor.Visible;
}
set
{
// Переключаем видимость
labelColor.Visible = comboColor.Visible = value;
}
}
// Свойство русского названия текущего стиля
// Перекинули диалоговому окну из класса StyleComboBox
public string StyleNameRus
{
get { return comboStyle.StyleNameRus; }
}
// Наш метод модификации текущего стиля в списке новым атрибутом
void ShowNewFont()
{
FontStyle style;
// Безопасный код
try
{
style = comboStyle.FontStyle;
}
catch
{
return;
}
// Готовим образец модифицированного стиля
if (checkStrikeout.Checked)
style |= FontStyle.Strikeout;
if (checkUnderline.Checked)
style |= FontStyle.Underline;
// Создаем новый шрифт и применяем его для текстовой метки
try
{
System.Drawing.Font font = new Font(comboFont.Text,
float.Parse(comboSize.Text), style);
labelSample.Font = font;
}
catch { }// Ничего не делать, но присутствия требует синтаксис
}
// Общий обработчик
void combo_Changed(object sender, EventArgs e)
{
ComboBox combo = sender as ComboBox;// Преобразуем ссылку
if (combo == null)
return;// Не является объектом ComboBox
// Меняем цвет метки образца, если она уже создана
if (combo == comboColor && labelSample != null)
{
labelSample.ForeColor = comboColor.Color;
return;
}
if (combo == comboFont)
{
// Вычисляем индекс запрошенного шрифта
int index = comboFont.FindStringExact(comboFont.Text);
// Если нашли, выделяем шрифт и извлекаем для него стили
// при условии, что объект ComboBox стилей уже создан
if (index != -1 && comboStyle != null)
{
comboFont.SelectedIndex = index;
comboStyle.FamilyName = comboFont.Text;
}
}
// Дополняем стили и меняем шрифт образца
ShowNewFont();
}
}
}
Листинг
16.17 .
Класс диалогового окна выбора шрифта NewFontDialog