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 | < Назад | Оглавление | Далее > |