| Украина, Киев |
Вывод текста в клиентскую область формы
Упражнение 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, чтобы повторяющийся код был не таким большим. Но можно воспользоваться циклом для вывода всех свойств класса и мы это сделаем чуть позже, дойдя до соответствующего места.

