Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 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. Ввожу код на сайте, пишет:

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

 

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

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974