Строка состояния (или строка статуса) это обычный элемент интерфейса пользователя (control), который обычно размещается в нижней части формы окна приложения (Form). Строка статуса используется для отображения какого-нибудь информационного текста, отражающего состояние приложения или результат действий пользователя. Строка статуса в Visual Studio C# представлена классом StatusStrip. В предыдущих версиях библиотеки Windows Forms класс элемента управления StatusBar использовался для предоставления функционала строки статуса. В библиотеке Windows Forms 4.0, которая является частью Visual Studio 2010, элемент управления StatusStrip заменил собой StatusBar. StatusStrip control не только предоставляет функционал строки статуса, то также предоставляет возможность добавлять в строку статуса полезные возможности интерфейса, такие как ProgressBar, DropDownButton и SplitButton.
В этой статье (перевод [1]) будет показано, как создать строку статуса на основе класса StatusStrip, и как использовать её основные возможности для приложений Windows в среде разработки Visual Studio 2010.
Подобно любому другому элементу интерфейса пользователя (Windows Forms control), мы можем создавать строку статуса либо во время разработки (design-time), либо создавать строку статуса динамически, из кода работающего приложения (run-time).
[Создание StatusStrip]
Создание design-time. Чтобы создать StatusStrip control во время разработки формы (design-time), просто перетащите StatusStrip control из панели Toolbox и опустите его на Form.
По умолчанию StatusStrip control будет привязан к нижней стороне окна приложения, как это показано на рисунке 1.
Рис. 1. Внешний вид строки статуса по умолчанию.
Разработчик также может добавить в строку статуса StatusStrip некоторые элементы управления (control), включая StatusLabel, ProgressBar, DropDownButton и SplitButton. Если Вы кликните мышью на маленький выпадающий список, то увидите в списке эти четыре control-а, как показано на рис. 2. Если Вы выберете здесь один из этих элементов, то он будет добавлен к StatusStrip control.
Рис. 2. Добавление визуальных элементов управления к строке состояния.
Создание run-time. В библиотеке Windows Forms элемент управления StatusStrip представлен классом StatusStrip. Подобно любому другому Windows control, мы можем создать объект класса, настроить его свойства, методы и события, и добавить этот control к другим control-ам Form-ы.
Пример кода ниже показывает создание объекта StatusStrip control. Как только control создан, нам нужно установить его свойства и вызвать метод Form.Controls.Add, чтобы добавить StatusStrip к другим элементам управления формы.
StatusStrip dynamicStatusStrip = new System.Windows.Forms.StatusStrip();
// Установите свойства, методы и события созданного экземпляра класса StatusStrip.
// Затем добавьте его к форме как обычный дочерний элемент управления:
Controls.Add(dynamicStatusStrip);
[Свойства StatusStrip]
Design-time. Класс StatusStrip унаследован от классов ToolStrip -> ScrollableControl -> Control, так что он имеет все их общие свойства, поддерживаемые органами управления интерфейса пользователя библиотеки Windows Forms. Некоторые из этих свойств включают Font, BackColor, Dock, BackgroundImage и TextDirection.
Некоторые из свойств StatusStrip использовать нельзя, например свойство Text. Вы можете подумать, что его можно использовать для отображения текста в строке статуса (что вполне логично), но это не так. Вот этот пример кода ни к чему не приведет, текст в строке статуса не появится:
Причина этой проблемы в том, что класс StatusStrip получает свойство Text при наследовании из класса ToolStrip (который в свою очередь наследует его из класса Control). Но у свойства Text класса ToolStrip нет визуального эффекта, просто так почему-то спроектирован класс ToolStrip. Поэтому присваивать значение свойству Text класса StatusStrip бесполезно. Поначалу это может запутать.
Для того, чтобы на самом деле вывести текст в строку статуса StatusStrip, необходимо добавить к StatusStrip элемент StatusLabel.
Для того, чтобы на самом деле вывести текст в строку статуса StatusStrip, необходимо добавить к StatusStrip элемент StatusLabel. В дизайнере формы это делается следующим образом, см. скриншот:
По умолчанию будет создан элемент класса toolStripStatusLabel1, доступный напрямую из кода формы. Для отображения текста нужно менять его свойство Text, пример:
namespacemyApp
{
publicpartialclassForm1 : Form
{
...
Design-time. В отличие от старого StatusBar control, теперь мы можем привязать StatusStrip к любой области окна формы. Для этого используется свойство Dock класса StatusStrip. StatusStrip можно привязать вверху (top), внизу (bottom), слева (left), справа (right) или по центру (center) формы. Рис. 4 показывает верхнюю привязку StatusStrip control.
Рис. 4. Пример отображения строки статуса в верхней части окна формы.
Run-time. У свойства Dock тип перечисления DockStyle. Вот так можно сделать привязку строки статуса к верхней части окна во время работы приложения:
dynamicStatusStrip.Dock = DockStyle.Top;
[Фоновое изображение]
Design-time. Свойство BackColor устанавливает цвет фона StatusStrip control. Также мы можем установить картинку в качестве цвета фона для StatusStrip. Для установки фоновой картинки используется свойство BackgroundImage. Когда Вы кликните на свойство BackgroundImage в дизайнере свойств (окно Property), то увидите окно Resource Editor наподобие показанного на рис. 5, где Вы можете найти на диске нужную картинку, или использовать локальные ресурсы с помощью кнопки Import.
Рис. 5. Установка фонового изображения для строки состояния.
Мы также можем установить тип отображения фоновой картинки (layout) с помощью свойства BackgroundImageLayout, так что она может быть растянута (stretched), отображена мозаикой (tiled), отображена в центре (centered) или подогнана по размеру (zoomed), как это показано на рис. 6.
Рис. 6. Как отображать фоновую картинку, свойство BackgroundImageLayout.
Run-time. Свойство BackgroundImage имеет тип Image. Мы можем использовать список картинок ImageList для управления всеми изображениями. Объект ImageList является набором объектов Image. Пример кода ниже создает объект ImageList, затем добавляет туда изображение из файла. После этого код устанавливает свойства BackgroundImage и BackgroundImageLayout строки статуса.
Design-time. TextDirection еще одно полезное свойство, которое отсутствовало в StatusBar control. С помощью него можно установить направление текста в StatusStrip control. Возможны 3 варианта Horizontal, Vertical90 и Vertical270. На рис. 7 показано направление текста Verical90 в строке статуса StatusStrip control.
Рис. 7. Так выглядит текст в строке статуса при TextDirection == Vertical90.
Run-time. У свойства TextDirection тип перечисления ToolStripTextDirection. Пример кода ниже показывает установку свойства направления текста во время работы приложения.
Sizing Grip это маленький уголок в правой нижней части окна, предназначенный для изменения размеров окна формы приложения. Этот элемент управления представлен свойством SizingGrip.
Свойство SizingGrip работает вместе со свойствами GripStyle и LayoutStyle. Свойство GripStyle используется, чтобы показать или спрятать стиль "уголка". Свойство LayoutStyle показано на рис. 8, оно задает тип размещения "уголка".
Рис. 8. Настройка свойства LayoutStyle для Sizing Grip.
Примечание: "уголок" не будет показан, пока Вы также не установите свойство LayoutStyle в одно из overflow-значений.
Run-time. Пример кода ниже устанавливает свойства SizingGrip, GripStyle и LayoutStyle во время работы приложения.
StatusStrip control ничто иное, как контейнер для дочерних элементов управления (child controls). Таким образом, в StatusStrip может находиться несколько дочерних элементов управления, которые представлены свойством Items. Если Вы кликните на свойство Items у StatusStrip control, то увидите окно диалога Items Collection Editor, где сможете добавлять, обновлять и удалять дочерние элементы управления строки статуса StatusStrip. Этот редактор покажет выпадающий список, где выбирается редактируемый/добавляемый элемент, и кнопку Add, которая дает возможность добавить выбранный дочерний элемент управления. В списке представлено 4 типа элемента: ToolStripStatusLabel, ToolStripProgressBar, ToolStripDropDownButton и ToolStripSplitButton.
Давайте теперь добавим по одному элементу каждого типа, как это можно увидеть на рис. 9. Как только элемент добавлен, можно в правой части окна увидеть его свойства, доступные для редактирования.
Рис. 9. Окно Items Collection Editor строки статуса StatusStrip.
Все дочерние элементы управления, помещенные в StatusStrip control, имеют свои собственные уникальные идентификаторы, и могут использоваться как независимые элементы графического интерфейса пользователя (controls). Это означает, что Вы можете использовать и управлять ими точно так же, как и остальными control-ами, расположенными на форме.
После добавления и дочерних элементов управления и установки их свойств конечный вид строки статуса StatusStrip будет выглядеть примерно так, как показано на рис. 10.
Рис. 10. Пример внешнего вида дочерних элементов управления StatusStrip.
Мы также можем устанавливать свойства, события и методы дочерних элементов путем правого клика на нем и выбора окна Properties, точно так же, как это делается с любым другим визуальным объектом управления. Если правым кликом Вы выбрали свойства ProgressBar, то увидите окно Properties примерно как показанное на рис. 11.
Рис. 11. Окно свойств дочернего ProgressBar.
Примечание: для редактирования свойств дочерних элементов управления строки статуса можно вызвать Items Collection Editor, если сделать правый клик на StatusStrip в редакторе формы, и в контекстном меню выбрать "Правка элементов..." (Edit Items...).
[Демонстрационный пример приложения со строкой статуса]
Создайте приложение Windows Forms, и добавьте на его форму StatusStrip control. Также добавьте на форму три кнопки. К StatusStrip добавьте дочерние элементы управления: две StatusStripStatusLabel, один StatusStripDropDownButton и один StatusStripProgressBar.
С помощью свойства Items элемента StatusStripDropDownButton добавьте к нему три пункта меню, и поменяйте их текст на Red (красный), Green (зеленый) и Blue (синий). Для каждого из пунктов меню создайте обработчики (event handler). Обработчик для пунктов меню будет выглядеть примерно так: