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