netlib.narod.ru< Назад | Оглавление | Далее >

Разбивка на колонки

По-моему, самый серьезный недостаток программы SysInfoFirstTry (не считая ее незавершенности) — форматирование. Такие данные было бы легче читать, если бы значения параметров выводились во второй колонке. Так что, прежде чем продолжить, давайте решим эту проблему.

Из десяти свойств, выводимых SysInfoFirstTry, самое длинное имя у свойства ArrangeStarttngPosition. Перед выводом информации в этой программе вызывается MeasureString с этим именем в качестве аргумента (к имени добавлен один пробел, чтобы разделить колонки).

SysInfoColumns.cs

  //-----------------------------------------------
  // SysInfoColumns.cs (C) 2001 by Charles Petzold
  //-----------------------------------------------
  using System;
  using System.Drawing;
  using System.Windows.Forms;

  class SysInfoColumns: Form
  {
      public static void Main()
      {
          Application.Run(new SysInfoColumns());
      }
      public SysInfoColumns()
      {
          Text = "System Information: Columns";
          BackColor = SystemColors.Window;
          ForeColor = SystemColors.WindowText;
      }
      protected override void OnPaint(PaintEventArgs pea)
      {
          Graphics grfx  = pea.Graphics;
          Brush    brush = new SolidBrush(ForeColor);
          SizeF    sizef;
          float    cxCol, y = 0;
          int      cySpace;

          sizef   = grfx.MeasureString("ArrangeStartingPosition ", Font);
          cxCol   = sizef.Width;
          cySpace = Font.Height;

          grfx.DrawString("ArrangeDirection", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.ArrangeDirection.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("ArrangeStartingPosition", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.ArrangeStartingPosition.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("BootMode", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.BootMode.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("Border3DSize", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.Border3DSize.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("BorderSize", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.BorderSize.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("CaptionButtonSize", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.CaptionButtonSize.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("CaptionHeight", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.CaptionHeight.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("ComputerName", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.ComputerName, 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("CursorSize", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.CursorSize.ToString(), 
                          Font, brush, cxCol, y);
          y += cySpace;

          grfx.DrawString("DbcsEnabled", Font, brush, 0, y);
          grfx.DrawString(SystemInformation.DbcsEnabled.ToString(), 
                          Font, brush, cxCol, y);
      }
  }

Ширина строки сохраняется в переменной cxCol и используется при размещении второй колонки. Кроме того, в переменной cySpace запоминается значение Height объекта Font, которое служит для разделения соседних строк. Координаты, передаваемые методу DrawString, имеют тип float.

Теперь для вывода каждой строки требуется два вызова DrawString: первый — для отображения имени свойства, второй — для отображения значения этого свойства. Все эти свойства, кроме одного, теперь требуют явного вызова метода ToString для преобразования значений в строковые переменные. Вот как это выглядит:


Рис. 4.2.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz