Вывод текста в клиентскую область формы
Упражнение 1.Получение информации о системе
Основную информацию о системе, на которой выполняется программа, можно получить с помощью класса System.Windows.Forms.SystemInformation, вернее с помощью его 60 общедоступных статических свойств
Класс SystemInformation содержит данные о количестве кнопок мыши, размере значков рабочего стола и высоте строки заголовка формы. В нем содержатся сведения о подключении к сети и имени домена, в котором находится данный компьютер. Свойства представляют собой разные типы. Ниже мы построим форму, которая будет выводить в клиентской области все эти полезные сведения в заданном нами формате.
Разделение текстовых строк
Расстояние между базовыми линиями двух строк по вертикали можно определить несколькими способами
- float System.Drawing.Font.GetHeight(float dpi) - Возвращает высоту шрифта в пикселах для вывода на устройство с указанной вертикальной разрешающей способностью. Это может быть экран, принтер или другое устройство вывода.
- float System.Drawing.Font.GetHeight() - Возвращает межстрочный интервал, в пикселах, установленного шрифта. Межстрочный интервал - вертикальное расстояние между базовыми линиями двух последовательных строк текста. Таким образом, межстрочный интервал включает в себя пустое пространство между строками вместе с высотой самого символа.
- float System.Drawing.Font.GetHeight(System.Drawing.Graphics graphics) - Возвращает межстрочный интервал шрифта, указанный в текущем модуле графического объекта.
- int System.Drawing.Font.Height - Содержит межстрочный интервал текущего шрифта.
- int System.Windows.Forms.Control.FontHeight - Свойство устанавливает или возвращает размер шрифта.
В следующем примере мы воспользуемся свойством Font.Height формы для определения требуемого междустрочного расстояния для установленного в форме шрифта. Давайте выведем первые десять свойств класса System.Windows.Forms.SystemInformation.
- Откройте файл SysInfoFirstTry в режиме кода и отредактируйте его так
using System; using System.Windows.Forms; using System.Drawing; namespace Test { public class SysInfoFirstTry : Form { public SysInfoFirstTry() { // В этом конструкторе будем размещать // настройки формы this.Text = "Избранные сведения о системе"; this.BackColor = SystemColors.Window; this.ForeColor = SystemColors.WindowText; } int i; // Заголовок этой функции набрать вручную!!!!!!!!!!!!!!!!!!!!!!!!!!!! protected override void OnPaint(PaintEventArgs e) { Graphics gr = e.Graphics; SolidBrush brush = new SolidBrush(this.ForeColor); System.Int32 y = 0; // Псевдонимом является int gr.DrawString((++i).ToString() + ") " + "ArrangeDirection: " + SystemInformation.ArrangeDirection.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "ArrangeStartingPosition: " + SystemInformation.ArrangeStartingPosition.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "BootMode: " + SystemInformation.BootMode.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "Border3DSize: " + SystemInformation.Border3DSize.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "BorderSize: " + SystemInformation.BorderSize.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "CaptionButtonSize: " + SystemInformation.CaptionButtonSize.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "CaptionHeight: " + SystemInformation.CaptionHeight.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "ComputerName: " + SystemInformation.ComputerName, Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "CursorSize: " + SystemInformation.CursorSize.ToString(), Font, brush, 0, y); y += Font.Height; gr.DrawString((++i).ToString() + ") " + "DbcsEnabled: " + SystemInformation.DbcsEnabled.ToString(), Font, brush, 0, y); base.OnPaint (e); } } }Листинг 15.11. Код файла SysInfoFirstTry.cs
Экранный результат будет таким
Попробуйте посворачивать и поразворачивать дочернюю форму SysInfoFirstTry. Можно заметить, что каждый раз нумерация пунктов свойств увеличивается. Исправим это
- Добавьте в начало функции OnPaint() следующий код
protected override void OnPaint(PaintEventArgs e) { i = 0; ............................................ }Листинг 15.12. Сбрасывание счетчика при каждом срабатывании OnPaint()
Из 60 свойств системы в библиотечном классе SystemInformation мы вывели только первые 10, чтобы повторяющийся код был не таким большим. Но можно воспользоваться циклом для вывода всех свойств класса и мы это сделаем чуть позже, дойдя до соответствующего места.