|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 16:
Динамическая компоновка формы
Класс управления списком стиля шрифта StyleComboBox
Разработаем класс StyleComboBox, который будет реализовывать поддержку стилей шрифтов и его экземпляр будет размещен в ячейке под текстовой меткой "Начертание". Этот класс будет расширением класса стандартного элемента управления поля со списком ComboBox. В нем нужно учесть, что не все семейства шрифтов поддерживают полный набор стилей:
а также нужно учесть дополнительные стили, применимые ко всем вышеперечисленным стилям:
Этот класс должен самостоятельно заполнять список доступными стилями при выборе пользователем конкретного шрифта, а также поддерживать поле списка при щелчке на соответствующем стиле. Вот этот класс-расширение StyleComboBox, размещенный в отдельном одноименном файле
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
// Расширяем библиотечный ComboBox на управление стилем
class StyleComboBox : ComboBox
{
// Конструктор настройки стиля как списка с редактируемым полем
public StyleComboBox()
{
this.DropDownStyle = ComboBoxStyle.DropDown;// По умолчанию
}
// Свойство типа перечисления System.Drawing.FontStyle
// Обеспечивает управление содержимым самого поля списка
// Преобразует название стиля в поле в стиль и наоборот
public FontStyle FontStyle
{
// Для того, чтобы заполнять русскими названиями стилей
get
{
// Возвращаем стиль, соответствующий названию в поле
if (this.SelectedItem.ToString() == "жирный курсив")
return FontStyle.Bold | FontStyle.Italic;
else if (this.SelectedItem.ToString() == "жирный")
return FontStyle.Bold;
else if (this.SelectedItem.ToString() == "курсив")
return FontStyle.Italic;
else
return FontStyle.Regular;
}
set
{
// Преобразуем выбранный в списке стиль
// в название стиля в поле списка
// Применяется прием - побитовая проверка по маске
if ((value & FontStyle.Bold)!=0
&& (value & FontStyle.Italic) != 0)
this.SelectedItem = "жирный курсив";
else if ((value & FontStyle.Bold) != 0)
this.SelectedItem = "жирный";
else if ((value & FontStyle.Italic) != 0)
this.SelectedItem = "курсив";
else
this.SelectedItem = "обычный";
}
}
// Метод добавляет в список название стиля, если он есть в шрифте,
// но отсутствует в списке, или удаляет из списка старое название,
// если оно есть в списке, но соответствующий стиль отсутствует в шрифте
void TryStyle(string strFamilyName, FontStyle style, string strStyleName)
{
// Все параметры входные
// strFamilyName - имя шрифта
// style - стиль, соответствующий названию
// strStyleName - название стиля в списке
// Ищем название в списке. Если не найдено, то возвращается -1
int index = this.FindStringExact(strStyleName);
// Безопасный код
try
{
// Пробуем создать объект заданного шрифта. Если он есть,
// то исключение не возникает, и если ранее не найден в списке,
// добавляем его название в список
new Font(strFamilyName, 12, style);
if (index == -1)
Items.Add(strStyleName);
}
catch
{
// На случай, если при смене шрифта список не очищаем!!!
// Откат, заказанного стиля в данном шрифте нет. Корректируем
// список, если в нем осталось название стиля от прежнего шрифта
if (index != -1)
{
this.Items.Remove(strStyleName);
}
}
}
// Свойство, заполняющее список стилями для заданного шрифта
public string FamilyName
{
set
{
// Для сохранения выделенного стиля при смене шрифта
string oldStyleName = "";
if (this.SelectedIndex != -1)// Игнорируем первый запуск
oldStyleName = this.SelectedItem.ToString();
// Очищаем список и заполняем заново,
// чтобы соблюсти порядок следования названий стилей
// необязательно, но тогда названия будут - как придется
this.Items.Clear();
// Выстраиваем порядок стилей как в стандартном диалоге
TryStyle(value, FontStyle.Regular, "обычный");
TryStyle(value, FontStyle.Italic, "курсив");
TryStyle(value, FontStyle.Bold, "жирный");
TryStyle(value, FontStyle.Bold | FontStyle.Italic,
"жирный курсив");
// Выделяем позицию списка
int index = this.FindStringExact(oldStyleName);
if (index != -1)// Если выделенный стиль имеется и в новом шрифте
this.SelectedIndex = index;
else // Нет ранее выделенного стиля в новом шрифте, сброс в начало
this.SelectedIndex = 0;
}
}
// Свойство для возврата русского названия текущего стиля
public string StyleNameRus
{
get { return this.SelectedItem.ToString(); }
}
}
}
Листинг
16.15 .
Код выбора стилей шрифта в файле StyleComboBox.cs