Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 15:

Вывод текста в клиентскую область формы

Упражнение 1.Получение информации о системе

Основную информацию о системе, на которой выполняется программа, можно получить с помощью класса System.Windows.Forms.SystemInformation, вернее с помощью его 60 общедоступных статических свойств


Класс SystemInformation содержит данные о количестве кнопок мыши, размере значков рабочего стола и высоте строки заголовка формы. В нем содержатся сведения о подключении к сети и имени домена, в котором находится данный компьютер. Свойства представляют собой разные типы. Ниже мы построим форму, которая будет выводить в клиентской области все эти полезные сведения в заданном нами формате.

Разделение текстовых строк

Расстояние между базовыми линиями двух строк по вертикали можно определить несколькими способами

  1. float System.Drawing.Font.GetHeight(float dpi) - Возвращает высоту шрифта в пикселах для вывода на устройство с указанной вертикальной разрешающей способностью. Это может быть экран, принтер или другое устройство вывода.
  2. float System.Drawing.Font.GetHeight() - Возвращает межстрочный интервал, в пикселах, установленного шрифта. Межстрочный интервал - вертикальное расстояние между базовыми линиями двух последовательных строк текста. Таким образом, межстрочный интервал включает в себя пустое пространство между строками вместе с высотой самого символа.
  3. float System.Drawing.Font.GetHeight(System.Drawing.Graphics graphics) - Возвращает межстрочный интервал шрифта, указанный в текущем модуле графического объекта.
  4. int System.Drawing.Font.Height - Содержит межстрочный интервал текущего шрифта.
  5. 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, чтобы повторяющийся код был не таким большим. Но можно воспользоваться циклом для вывода всех свойств класса и мы это сделаем чуть позже, дойдя до соответствующего места.

Александр Очеретяный
Александр Очеретяный
Украина, Киев
Анастасия Балыбердина
Анастасия Балыбердина
Украина, Киев, НТУУ КПИ