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

Вокруг одни объекты

В программе вроде SysInfoColumns фрагмент кода, выводящий значения на экран, вероятно, следует оформить с применением цикла for. Сами данные скорее всего стоит хранить в массиве и, возможно, отделить их от кода, осуществляющего вывод, так чтобы этот код можно было задействовать в других программах. В программе на С или C++ вы могли бы поместить данные в массив в заголовочном файле, однако в С# нет заголовочных файлов. Здесь надо вспомнить волшебное правило С#: «вокруг одни объекты», по крайней мере — классы со статическими методами и свойствами.

Вот как можно использовать класс, содержащий текстовые строки, которые мы хотим вывести на экран, и некоторую информацию о них.

SysInfoStrings.cs

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

  class SysInfoStrings
  {
      public static string[] Labels
      {
          get
          {
              return new string[] 
              {
                  "ArrangeDirection",
                  "ArrangeStartingPosition",
                  "BootMode",
                  "Border3DSize",
                  "BorderSize",
                  "CaptionButtonSize",
                  "CaptionHeight",
                  "ComputerName",
                  "CursorSize",
                  "DbcsEnabled",
                  "DebugOS",
                  "DoubleClickSize",
                  "DoubleClickTime",
                  "DragFullWindows",
                  "DragSize",
                  "FixedFrameBorderSize",
                  "FrameBorderSize",
                  "HighContrast",
                  "HorizontalScrollBarArrowWidth",
                  "HorizontalScrollBarHeight",
                  "HorizontalScrollBarThumbWidth",
                  "IconSize",
                  "IconSpacingSize",
                  "KanjiWindowHeight",
                  "MaxWindowTrackSize",
                  "MenuButtonSize",
                  "MenuCheckSize",
                  "MenuFont",
                  "MenuHeight",
                  "MidEastEnabled",
                  "MinimizedWindowSize",
                  "MinimizedWindowSpacingSize",
                  "MinimumWindowSize",
                  "MinWindowTrackSize",
                  "MonitorCount",
                  "MonitorsSameDisplayFormat",
                  "MouseButtons",
                  "MouseButtonsSwapped",
                  "MousePresent",
                  "MouseWheelPresent",
                  "MouseWheelScrollLines",
                  "NativeMouseWheelSupport",
                  "Network",
                  "PenWindows",
                  "PrimaryMonitorMaximizedWindowSize",
                  "PrimaryMonitorSize",
                  "RightAlignedMenus",
                  "Secure",
                  "ShowSounds",
                  "SmallIconSize",
                  "ToolWindowCaptionButtonSize",
                  "ToolWindowCaptionHeight",
                  "UserDomainName",
                  "UserInteractive",
                  "UserName",
                  "VerticalScrollBarArrowHeight",
                  "VerticalScrollBarThumbHeight",
                  "VerticalScrollBarWidth",
                  "VirtualScreen",
                  "WorkingArea",
              };
          }
      }
      public static string[] Values
      {
          get
          {
              return new string[]
              {
              SystemInformation.ArrangeDirection.ToString(),
              SystemInformation.ArrangeStartingPosition.ToString(),
              SystemInformation.BootMode.ToString(),
              SystemInformation.Border3DSize.ToString(),
              SystemInformation.BorderSize.ToString(),
              SystemInformation.CaptionButtonSize.ToString(),
              SystemInformation.CaptionHeight.ToString(),
              SystemInformation.ComputerName,
              SystemInformation.CursorSize.ToString(),
              SystemInformation.DbcsEnabled.ToString(),
              SystemInformation.DebugOS.ToString(),
              SystemInformation.DoubleClickSize.ToString(),
              SystemInformation.DoubleClickTime.ToString(),
              SystemInformation.DragFullWindows.ToString(),
              SystemInformation.DragSize.ToString(),
              SystemInformation.FixedFrameBorderSize.ToString(),
              SystemInformation.FrameBorderSize.ToString(),
              SystemInformation.HighContrast.ToString(),
              SystemInformation.HorizontalScrollBarArrowWidth.ToString(),
              SystemInformation.HorizontalScrollBarHeight.ToString(),
              SystemInformation.HorizontalScrollBarThumbWidth.ToString(),
              SystemInformation.IconSize.ToString(),
              SystemInformation.IconSpacingSize.ToString(),
              SystemInformation.KanjiWindowHeight.ToString(),
              SystemInformation.MaxWindowTrackSize.ToString(),
              SystemInformation.MenuButtonSize.ToString(),
              SystemInformation.MenuCheckSize.ToString(),
              SystemInformation.MenuFont.ToString(),
              SystemInformation.MenuHeight.ToString(),
              SystemInformation.MidEastEnabled.ToString(),
              SystemInformation.MinimizedWindowSize.ToString(),
              SystemInformation.MinimizedWindowSpacingSize.ToString(),
              SystemInformation.MinimumWindowSize.ToString(),
              SystemInformation.MinWindowTrackSize.ToString(),
              SystemInformation.MonitorCount.ToString(),
              SystemInformation.MonitorsSameDisplayFormat.ToString(),
              SystemInformation.MouseButtons.ToString(),
              SystemInformation.MouseButtonsSwapped.ToString(),
              SystemInformation.MousePresent.ToString(),
              SystemInformation.MouseWheelPresent.ToString(),
              SystemInformation.MouseWheelScrollLines.ToString(),
              SystemInformation.NativeMouseWheelSupport.ToString(),
              SystemInformation.Network.ToString(),
              SystemInformation.PenWindows.ToString(),
              SystemInformation.PrimaryMonitorMaximizedWindowSize.ToString(),
              SystemInformation.PrimaryMonitorSize.ToString(),
              SystemInformation.RightAlignedMenus.ToString(),
              SystemInformation.Secure.ToString(),
              SystemInformation.ShowSounds.ToString(),
              SystemInformation.SmallIconSize.ToString(),
              SystemInformation.ToolWindowCaptionButtonSize.ToString(),
              SystemInformation.ToolWindowCaptionHeight.ToString(),
              SystemInformation.UserDomainName,
              SystemInformation.UserInteractive.ToString(),
              SystemInformation.UserName,
              SystemInformation.VerticalScrollBarArrowHeight.ToString(),
              SystemInformation.VerticalScrollBarThumbHeight.ToString(),
              SystemInformation.VerticalScrollBarWidth.ToString(),
              SystemInformation.VirtualScreen.ToString(),
              SystemInformation.WorkingArea.ToString(),
              };
          }
      }
      public static int Count
      {
          get
          {
              return Labels.Length;
          }
      }
      public static float MaxLabelWidth(Graphics grfx, Font font)
      {
          return MaxWidth(Labels, grfx, font);
      }
      public static float MaxValueWidth(Graphics grfx, Font font)
      {
          return MaxWidth(Values, grfx, font);
      }
      static float MaxWidth(string[] astr, Graphics grfx, Font font) 
      {
          float fMax = 0;

          foreach (string str in astr)
              fMax = Math.Max(fMax, grfx.MeasureString(str, font).Width);

           return fMax;
      }
  }

У этого класса три неизменяемых статических свойства. Первое — Labels — возвращает массив строк, содержащий имена свойств SystemInformation.

Второе — Values — также возвращает массив символьных строк, каждая из которых соответствует своему элементу массива Labels. Однако на самом деле массив Values состоит из набора выражений для свойств SystemInformation, каждое из которых представляется в виде строки. Каждое выражение вычисляется в момент вызова свойства. В приведенном листинге вы можете видеть вызовы метода ToString для преобразования каждого из значений в строку.

Третье свойство возвращает количество элементов в массиве Labels, которое (если, конечно, я нигде не напутал) должно равняться числу элементов в массиве Values.

Кроме того, SysInfoStrings содержит два открытых метода: MaxLabelWidth и MaxValueWidth. В качестве аргументов им передаются объекты Graphics и Font, и каждый возвращает максимальную ширину строки в соответствующем массиве, полученную с помощью метода MeasureString. В обоих случаях применяется закрытый метод MaxWidth, который в свою очередь использует статический метод Math.Max для сравнения двух значений и выбора максимального из них. (Класс Math в пространстве имен System представляет собой набор статических методов, реализующих математические функции. Подробнее о классе Math и других особенностях обработки чисел см. Приложение Б.)


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

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