Программирование PC StatusStrip: использование строки статуса на C# Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

StatusStrip: использование строки статуса на C# Печать
Добавил(а) microsin   

Строка состояния (или строка статуса) это обычный элемент интерфейса пользователя (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 panel

По умолчанию StatusStrip control будет привязан к нижней стороне окна приложения, как это показано на рисунке 1.

StatusStrip added

Рис. 1. Внешний вид строки статуса по умолчанию.

Разработчик также может добавить в строку статуса StatusStrip некоторые элементы управления (control), включая StatusLabel, ProgressBar, DropDownButton и SplitButton. Если Вы кликните мышью на маленький выпадающий список, то увидите в списке эти четыре control-а, как показано на рис. 2. Если Вы выберете здесь один из этих элементов, то он будет добавлен к StatusStrip control.

StatusStrip add child controls

Рис. 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. Вы можете подумать, что его можно использовать для отображения текста в строке статуса (что вполне логично), но это не так. Вот этот пример кода ни к чему не приведет, текст в строке статуса не появится:

private void textBox1_TextChanged(object sender, EventArgs e)
{
   statusStrip1.Text = "Попытка вывести текст";
   statusStrip1.Refresh();
}

Причина этой проблемы в том, что класс StatusStrip получает свойство Text при наследовании из класса ToolStrip (который в свою очередь наследует его из класса Control). Но у свойства Text класса ToolStrip нет визуального эффекта, просто так почему-то спроектирован класс ToolStrip. Поэтому присваивать значение свойству Text класса StatusStrip бесполезно. Поначалу это может запутать.

Для того, чтобы на самом деле вывести текст в строку статуса StatusStrip, необходимо добавить к StatusStrip элемент StatusLabel.

Для того, чтобы на самом деле вывести текст в строку статуса StatusStrip, необходимо добавить к StatusStrip элемент StatusLabel. В дизайнере формы это делается следующим образом, см. скриншот:

StatusStrip add StatusLabel

По умолчанию будет создан элемент класса toolStripStatusLabel1, доступный напрямую из кода формы. Для отображения текста нужно менять его свойство Text, пример:

namespace myApp
{
   public partial class Form1 : Form
   {
      ...
 
      public void msg(string message)
      {
         toolStripStatusLabel1.Text = message;
         logfile.write(message);
      }
   }
}

Мы можем установить свойства StatusStrip control во время разработки формы, используя окно Properties, как это показано на рис. 3.

StatusStrip Properties

Рис. 3. Окно редактирования свойств StatusStrip.

Run-time. Пример кода ниже показывает установку свойств Name, Text, BackColor, Font и ForeColor у StatusStrip control во время работы приложения.

StatusStrip dynamicStatusStrip = new System.Windows.Forms.StatusStrip();           
dynamicStatusStrip.Name = "DynamicStatusStrip";
dynamicStatusStrip.Text = "statusStrip1";
dynamicStatusStrip.BackColor = Color.OrangeRed;
dynamicStatusStrip.Font = new Font("Georgia", 14, FontStyle.Italic);
dynamicStatusStrip.ForeColor = Color.White;

[Размещение на форме StatusStrip]

Design-time. В отличие от старого StatusBar control, теперь мы можем привязать StatusStrip к любой области окна формы. Для этого используется свойство Dock класса StatusStrip. StatusStrip можно привязать вверху (top), внизу (bottom), слева (left), справа (right) или по центру (center) формы. Рис. 4 показывает верхнюю привязку StatusStrip control.

StatusStrip Dock

Рис. 4. Пример отображения строки статуса в верхней части окна формы.

Run-time. У свойства Dock тип перечисления DockStyle. Вот так можно сделать привязку строки статуса к верхней части окна во время работы приложения:

dynamicStatusStrip.Dock = DockStyle.Top;

[Фоновое изображение]

Design-time. Свойство BackColor устанавливает цвет фона StatusStrip control. Также мы можем установить картинку в качестве цвета фона для StatusStrip. Для установки фоновой картинки используется свойство BackgroundImage. Когда Вы кликните на свойство BackgroundImage в дизайнере свойств (окно Property), то увидите окно Resource Editor наподобие показанного на рис. 5, где Вы можете найти на диске нужную картинку, или использовать локальные ресурсы с помощью кнопки Import.

StatusStrip BackgroundImage select

Рис. 5. Установка фонового изображения для строки состояния.

Мы также можем установить тип отображения фоновой картинки (layout) с помощью свойства BackgroundImageLayout, так что она может быть растянута (stretched), отображена мозаикой (tiled), отображена в центре (centered) или подогнана по размеру (zoomed), как это показано на рис. 6.

StatusStrip BackgroundImageLayout

Рис. 6. Как отображать фоновую картинку, свойство BackgroundImageLayout.

Run-time. Свойство BackgroundImage имеет тип Image. Мы можем использовать список картинок ImageList для управления всеми изображениями. Объект ImageList является набором объектов Image. Пример кода ниже создает объект ImageList, затем добавляет туда изображение из файла. После этого код устанавливает свойства BackgroundImage и BackgroundImageLayout строки статуса.

ImageList dynamicImgList = new ImageList();
dynamicImgList.Images.Add(Image.FromFile(@"c:\temp\header-microsin.jpg"));
dynamicStatusStrip.BackgroundImage = dynamicImgList.Images[0];
dynamicStatusStrip.BackgroundImageLayout = ImageLayout.Center;

[Направление текста]

Design-time. TextDirection еще одно полезное свойство, которое отсутствовало в StatusBar control. С помощью него можно установить направление текста в StatusStrip control. Возможны 3 варианта Horizontal, Vertical90 и Vertical270. На рис. 7 показано направление текста Verical90 в строке статуса StatusStrip control.

StatusStrip TextDirection

Рис. 7. Так выглядит текст в строке статуса при TextDirection == Vertical90.

Run-time. У свойства TextDirection тип перечисления ToolStripTextDirection. Пример кода ниже показывает установку свойства направления текста во время работы приложения.

dynamicStatusStrip.TextDirection = ToolStripTextDirection.Vertical270;

[Sizing Grip, Grip Style, Layout Style]

Sizing Grip это маленький уголок в правой нижней части окна, предназначенный для изменения размеров окна формы приложения. Этот элемент управления представлен свойством SizingGrip.

StatusStrip Sizing Grip

Свойство SizingGrip работает вместе со свойствами GripStyle и LayoutStyle. Свойство GripStyle используется, чтобы показать или спрятать стиль "уголка". Свойство LayoutStyle показано на рис. 8, оно задает тип размещения "уголка".

StatusStrip LayoutStyle

Рис. 8. Настройка свойства LayoutStyle для Sizing Grip.

Примечание: "уголок" не будет показан, пока Вы также не установите свойство LayoutStyle в одно из overflow-значений.

Run-time. Пример кода ниже устанавливает свойства SizingGrip, GripStyle и LayoutStyle во время работы приложения.

dynamicStatusStrip.SizingGrip = true;
dynamicStatusStrip.GripStyle = ToolStripGripStyle.Visible;
dynamicStatusStrip.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow;

[Добавление элементов управления к StatusStrip]

StatusStrip control ничто иное, как контейнер для дочерних элементов управления (child controls). Таким образом, в StatusStrip может находиться несколько дочерних элементов управления, которые представлены свойством Items. Если Вы кликните на свойство Items у StatusStrip control, то увидите окно диалога Items Collection Editor, где сможете добавлять, обновлять и удалять дочерние элементы управления строки статуса StatusStrip. Этот редактор покажет выпадающий список, где выбирается редактируемый/добавляемый элемент, и кнопку Add, которая дает возможность добавить выбранный дочерний элемент управления. В списке представлено 4 типа элемента: ToolStripStatusLabel,  ToolStripProgressBar, ToolStripDropDownButton и ToolStripSplitButton.

Давайте теперь добавим по одному элементу каждого типа, как это можно увидеть на рис. 9. Как только элемент добавлен, можно в правой части окна увидеть его свойства, доступные для редактирования.

StatusStrip Item Collection Editor

Рис. 9. Окно Items Collection Editor строки статуса StatusStrip.

Все дочерние элементы управления, помещенные в StatusStrip control, имеют свои собственные уникальные идентификаторы, и могут использоваться как независимые элементы графического интерфейса пользователя (controls). Это означает, что Вы можете использовать и управлять ими точно так же, как и остальными control-ами, расположенными на форме.

После добавления и дочерних элементов управления и установки их свойств конечный вид строки статуса StatusStrip будет выглядеть примерно так, как показано на рис. 10.

StatusStrip controls

Рис. 10. Пример внешнего вида дочерних элементов управления StatusStrip.

Мы также можем устанавливать свойства, события и методы дочерних элементов путем правого клика на нем и выбора окна Properties, точно так же, как это делается с любым другим визуальным объектом управления. Если правым кликом Вы выбрали свойства ProgressBar, то увидите окно Properties примерно как показанное на рис. 11.

StatusStrip ProgressBar Properties

Рис. 11. Окно свойств дочернего ProgressBar.

Примечание: для редактирования свойств дочерних элементов управления строки статуса можно вызвать Items Collection Editor, если сделать правый клик на StatusStrip в редакторе формы, и в контекстном меню выбрать "Правка элементов..." (Edit Items...).

[Демонстрационный пример приложения со строкой статуса]

Создайте приложение Windows Forms, и добавьте на его форму StatusStrip control. Также добавьте на форму три кнопки. К StatusStrip добавьте дочерние элементы управления: две StatusStripStatusLabel, один StatusStripDropDownButton и один StatusStripProgressBar.

С помощью свойства Items элемента StatusStripDropDownButton добавьте к нему три пункта меню, и поменяйте их текст на Red (красный), Green (зеленый) и Blue (синий). Для каждого из пунктов меню создайте обработчики (event handler). Обработчик для пунктов меню будет выглядеть примерно так:

private void RedMenuItemClick(object sender, EventArgs e)
{
}

То, что должно получиться, внешний вид формы показан на рис. 12.

StatusStrip test app form

Рис. 12. Вид формы тестового приложения.

В обработчике кнопки Start установите свойства Value и Text для ProgressBar:

private void StartButton_Click(object sender, EventArgs e)
{
   toolStripProgressBar1.Value = 90;
   ProgressLabel.Text = toolStripProgressBar1.Value.ToString();
}

Для демонстрации изменения цвета строки статуса вставите в обработчики пунктов меню Red, Green и Blue следующий код:

private void RedMenuItemClick(object sender, EventArgs e)
{
   statusStrip1.BackColor = Color.Red;
}
 
private void GreenMenuItemClick(object sender, EventArgs e)
{
   statusStrip1.BackColor = Color.Green;
}
 
private void BlueMenuItemClick(object sender, EventArgs e)
{
   statusStrip1.BackColor = Color.Blue;
}

[Обновление StatusStrip]

Если неоходимо обновить изменение вида StatusStrip (например текста, полоски прогресса), то необходимо вызвать метод Refresh() визуального элемента:

// Этот вызов обновит только полоску прогресса на строке статуса:
toolStripProgressBar1.ProgressBar.Refresh();
// Этот вызов обновит все дочерние элементы сторки статуса:
statusStrip1.Refresh();

Для упрощения можно вызвать полное обновление формы, тогда обновятся все её визуальные элементы, включая строку статуса и её дочерние компоненты:

Refresh();

[Ссылки]

1. StatusStrip in C# site:c-sharpcorner.com.
2. StatusStrip Control in C# site:c-sharpcorner.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page