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

Отображение информации о системе

Б проекте SysInfoList я создал файл SysInfoStrings.cs, а также показанный ниже файл SysInfoList.cs. Эта программа отображает сведения о системе, возвращаемые классом SysInfoStrings.

SysInfoList.cs

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

  class SysInfoList: Form
  {
      readonly float cxCol;
      readonly int   cySpace;

      public static void Main()
      {
          Application.Run(new SysInfoList());
      }
      public SysInfoList()
      {
          Text = "System Information: List";
          BackColor = SystemColors.Window;
          ForeColor = SystemColors.WindowText;

          Graphics grfx  = CreateGraphics();
          SizeF    sizef = grfx.MeasureString(" ", Font);
          cxCol = sizef.Width + SysInfoStrings.MaxLabelWidth(grfx, Font);
          grfx.Dispose();
          cySpace = Font.Height;
      }
      protected override void OnPaint(PaintEventArgs pea)
      {
          Graphics grfx       = pea.Graphics;
          Brush    brush      = new SolidBrush(ForeColor);
          int      iCount     = SysInfoStrings.Count;
          string[] astrLabels = SysInfoStrings.Labels;
          string[] astrValues = SysInfoStrings.Values;

          for (int i = 0; i < iCount; i++)
          {
               grfx.DrawString(astrLabels[i], Font, brush, 
                               0, i * cySpace);
               grfx.DrawString(astrValues[i], Font, brush, 
                               cxCol, i * cySpace); 
          }
      }
  }

Эта программа немного оптимизирована, так как значения cxCol и cySpace вычисляются лишь однажды в конструкторе формы и затем сохраняются в качестве полей, используемых позже методом OnPaint. Однако это вычисление требует вызова метода MeasureString, для чего в свою очередь требуется объект Graphics. Как же получить этот объект вне события Paint или метода OnPaint?

Класс Control содержит наследуемый классом Form метод CreateGraphics, позволяющий в любой момент получить доступ к объекту Graphics:


Методы Control (выборочно)



Graphics CreateGraphics()


Объект Graphics можно использовать для получения информации (как это сделано в SysInfoList) или для вывода графики в клиентской области программы. (Однако не стоит беспокоиться о выводе графики во время работы конструктора, так как в это время форма не отображается.)

До возврата управления от конструктора или события, в котором при помощи метода CreateGraphics был создан объект Graphics, этот объект нужно уничтожить вызвав метод Dispose:


Методы Graphics (выборочно)



void Dispose()


За созданием объекта Graphics методом CreateGraphics в программе SysInfoList идет вызов MeasureString для вычисления ширины символа «пробел». Полученная величина прибавляется к значению MaxLabelWidth, возвращенному классом SysInfoStrings, а результат сохраняется в переменной cxCol. В методе OnPaint находится простой цикл for, внутри которого выводятся пары строк.

Мы определенно достигли некоторого прогресса:


Рис. 4.3.

Однако в зависимости от установленного на вашем компьютере разрешения экрана (которое мы будем подробно обсуждать в главе 9), вам, возможно, не удастся развернуть форму так, чтобы видеть все 60 значений. В этом случае программа окажется не слишком полезной, так как просмотреть значения, находящиеся в конце списка, невозможно.

Вы можете столкнуться с этой проблемой, даже если речь будет идти всего о 20 или 25 значениях. Возможно худшей ошибкой в программировании для Windows является предположение о том, что некоторое количество текста будет умещаться на экранах всех пользователей программы. Пользователи — особенно со слабым зрением — могут установить крупный размер шрифта, уменьшив тем самым количество текста, умещающегося на экране. Поэтому в ваших программах надо предусматривать возможность работы при любом разрешении экрана и размере шрифта.

Отобразить больше текста, чем умещается на экране, помогут полосы прокрутки.


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

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