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