Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 16:

Динамическая компоновка формы

Запускающий код приложения

И наконец, последним разрабатываем код запускающего файла Program.cs для тестирования самопального диалога и сравнения его со стандартным диалогом

using System;
using System.Drawing;
using System.Windows.Forms;
    
namespace Test
{
    // Форма приложения
    class MyClass : Form
    {
    public MyClass()
    {
    this.Text = "Самодельный диалог шрифта";
    // Подстраиваем под ширину заголовка
    this.Width = this.Text.Length * this.Font.Height;
    this.ResizeRedraw = true;// Перерисовывать при изменении размеров
    this.ForeColor = Color.Red;// Писать красным
    
    this.Menu = new MainMenu();// Создать линейку для заголовков меню
    this.Menu.MenuItems.Add("Формат");// Добавить нулевой заголовок
    // Добавить в нулевой заголовок опции и общий обработчик
    this.Menu.MenuItems[0].MenuItems.Add
    ("Стандартный диалог...", OnStdFont);
    this.Menu.MenuItems[0].MenuItems.Add("Самодельный диалог...",
                OnNewFont);
    
    Panel palelMenu = new Panel();// Создать панель для красоты
    palelMenu.BorderStyle = BorderStyle.Fixed3D;// Рельефная
    palelMenu.Dock = DockStyle.Top;// Причалить вверх
    palelMenu.Height = 4;// Минимально отображаемая высота
    palelMenu.Parent = this;// Привязать к форме
    }
    
    // Обработка стандартного диалога
    void OnStdFont(object sender, EventArgs args)
    {
    // Создаем окно
    FontDialog dlg = new FontDialog();
    // Настраиваем окно
    dlg.Font = this.Font;
    dlg.Color = this.ForeColor;
    dlg.ShowColor = true;
    
    // Отдаем окно для управления пользователю
    if (dlg.ShowDialog() == DialogResult.OK)
    {
    // Применяем выбор пользователя к форме
    this.Font = dlg.Font;
    this.ForeColor = dlg.Color;
    style = "";// Нечего присвоить из стандартного диалога
    // Обновляем вызывающую форму, при этом выводим параметры шрифта
    this.Invalidate();
    }
    }
    
    string style = null;// Поле для хранения значения стиля 
    // "Начертание:" для видимости в обработчиках
    // Обработка самодельного диалога
    void OnNewFont(object sender, EventArgs args)
    {
    // Создаем окно
    NewFontDialog dlg = new NewFontDialog();
    // Настраиваем окно
    dlg.Font = this.Font;
    dlg.Color = this.ForeColor;
    dlg.ShowColor = true;
    
    // Отдаем окно для управления пользователю
    if (dlg.ShowDialog() == DialogResult.OK)
    {
    // Применяем выбор пользователя к форме
    this.Font = dlg.Font;
    this.ForeColor = dlg.Color;
    style = dlg.StyleNameRus;
    // Обновляем вызывающую форму, при этом выводим параметры шрифта
    this.Invalidate();
    }
    }
    
    // Рисуем на форме параметры шрифта
    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics gr = e.Graphics;
    // Формируем содержимое выводимого текста
    string message = "Текущие параметры шрифта\n" + 
    Environment.NewLine;
    message += "Шрифт: " + this.Font.Name + 
    Environment.NewLine;
    message += "Цвет: " + this.ForeColor.Name + 
    Environment.NewLine;
    // Добавим русское название стиля из нашего диалога
    if (style != null && style.Length > 0)
      message += "Начертание: " + style + 
    Environment.NewLine;
    message += "Размер: " + this.Font.SizeInPoints.ToString();
    // Добавляем дополнительный стиль, если есть
    bool flag = (this.Font.Style & FontStyle.Strikeout) != 0 ||
                (this.Font.Style & FontStyle.Underline) != 0;
    if (flag)
      message += Environment.NewLine;
    if ((this.Font.Style & FontStyle.Strikeout) != 0)
                message += "Зачеркнутый ";
    if ((this.Font.Style & FontStyle.Underline) != 0)
                message += " Подчеркнутый";
    // Объект форматирования текстового блока
    StringFormat strFormat = new StringFormat();
    strFormat.LineAlignment = strFormat.Alignment =
                StringAlignment.Center;
    // Рисуем текст новыми параметрами, 
    // установленными в обработчиках
    gr.DrawString(message, this.Font,
                new SolidBrush(this.ForeColor),
                this.ClientRectangle, strFormat);
    }
    }
    
    // Запуск
    class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            // Создали форму и передали ее в цикл сообщений Windows
            Application.Run(new MyClass());
        }
    }
}
Листинг 16.18 . Код тестирующего файла Program.cs

Вот результат работы кода


Испытав работу нашего самодельного диалогового окна, мы можем убедиться, что оно ничем не отличается от библиотечного диалога. Для чего делали? А чтобы программистские мускулы нарастить!

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?