Рейтинговые книги
Читем онлайн ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 171 172 173 174 175 176 177 178 179 ... 259

Итак, проектирование нашего графического интерфейса пользователя завершено. Но, чтобы реализовать оставшиеся обработчики событий, мы с вами должны выяснить роль компонента Timer (таймер).

Работа с типом Timer

Напомним, что средняя часть строки состояния должна отображать текущее время или текущую дату, в зависимости от предпочтений пользователя.

Первым шагом на пути к достижению этой цели является добавление в форму члена-переменной Timer – компонента, вызывающего некоторый метод (указанный с помощью обработчика события Tick) через заданный интервал времени (указанный с помощью свойства Interval).

Перетащите компонент Timer в окно проектирования формы и переименуйте его в timerDateTimeUpdate. Используя окно свойств, установите значение свойства Interval равным 1000 (это значение в миллисекундах), а значение свойства Enabled – равным true (истина). Наконец, обработайте событие Tick. Перед реализацией обработчика событий Tick определите в проекте новый тип перечня с именем DateTimeFormat. Этот перечень будет использоваться для выяснения того, что должен отображать второй элемент ToolStripStatusLabel – текущее время или текущую дату.

enum DateTimeFormat {

 ShowClock,

 ShowDay

}

Построив перечень, обновите MainWindow так, как предлагается ниже.

public partial class MainWindow: Form {

 // Какой формат отображать?

 DateTimeFormat dtFormat = DateTimeFormat.ShowClock;

 …

 private void timerDateTimeUpdate_Tick(object sender, EventArgs e) {

  string panelInfo = "";

  // Создание текущего формата.

  if (dtFormat == DateTimeFormat.ShowClock) panelInfo = DateTime.Now.ToLongTimeString();

  else panelInfo = DateTime.Now.ToLongDateString();

  // Установка текста для панели.

  toolStripStatusLabelClock.Text = panelInfo;

 }

}

Обратите внимание на то, что обработчик события Timer использует тип DateTime. Здесь вы просто читаете текущее время или дату системы, используя свойство Now, и устанавливаете соответствующее значение для свойства Text члена-переменной toolStripStatusLabelClock.

Включение отображения

В этот момент обработчик событий Tick должен отобразить в панели toolStripStatusLabelClock текущее время, если значением по умолчанию члена-переменной DateTimeFormat является DateTimeFormat.ShowClock. Чтобы позволить пользователю переключаться между отображением даты и времени, обновите MainWindow так, как предлагается ниже (заметьте, что здесь также указано, какой из двух пунктов меню в ToolStripDropDownButton должен при этом отмечаться).

public partial class MainWindow: Form {

 // Какой формат отображать?

 DateTimeFormat dtFormat = DateTimeFormat.ShowClock;

 // Указывает отмеченный элемент.

 private ToolStripMenuItem currentCheckedItem;

 public MainWindow() {

  InitializeComponent();

  // Эти свойства можно также установить

  // в окне Properties.

  Text = "Пример StatusStrip";

  CenterToScreen();

  BackColor = Color.CadetBlue;

  currentCheckedItem = currentTimeToolStripMenuItem;

  currentCheckedItem.Checked = true;

 }

 …

 private void currentTimeToolStripMenuItem_Click(object sender, EventArgs e) {

  // Установка отметки и формата времени для панели.

  currentCheckedItem.Checked = false;

  dtFormat = DateTimeFormat.ShowClock;

  currentCheckedItem = currentTimeToolStripMenuItem;

  currentCheckedItem.Checked = true;

 }

 private void dayoftheWeekToolStripMenuItem_Click(object Sender, EventArgs e) {

  // Установка отметки и формата даты для панели.

  currentCheckedItem.Checked = false;

  dtFormat = DateTimeFormat.ShowDay;

  currentCheckedItem = dayoftheWeekToolStripMenuItem;

  currentCheckedIteim.Checked = true;

 }

}

Вывод подсказок для выбранных элементов меню

Наконец, нужно настроить первую панель так. чтобы она содержала текст подсказки для выбранного пользователем элемента меню. Вы знаете, что большинство приложений отображает в левой части строки состояния поясняющую информацию (например, "Выход из приложения"), соответствующую выбранному конечным пользователем пункту меню. Если вы обработали события MouseHover для всех элементов меню нижнего уровня в MenuStrip и ToolStripDropDownButton, то остается только присвоить подходящее значение свойству Text для члена-переменной toolStripStatusLabelMenuState, например:

private void exitToolStripMenuItem_MouseHover(object sender, EventArgs e) { toolStripStatusLabelMenuState.Text = "Выход из приложения"; }

private void aboutToolStripMenuItem_MouseHover(object sender, EventArgs e) { toolStripStatusLabelMenuState.Text = "Отображение информации о приложении"; }

private void dayioftheWeekToolStripMenuItem_MouseHover(object sender, EventArgs e) { toolStripStatusLabelMenuState.Text = "Отображение текущей даты."; }

private void currentTimeToolStripMenuItem_MouseHover(object sender, EventArgs e) { toolStripStatusLabelMenuState.Text = "Отображение текущего времени."; }

Итак, у вас есть обновленный проект для тестового запуска. Теперь при выборе пунктов меню вы должны видеть в первой панели элемента StatusStrip соответствующие строки с поясняющей информацией.

Состояние готовности

Наконец, нужно гарантировать, что при снятии указателя мыши с пункта меню пользователем в первой текстовой панели не останется "старая" подсказка, а будет отображено некоторое "типовое" сообщение (например: "Ожидание действий пользователя"). В текущем своем виде наше приложение оставит в строке текст, соответствующий ранее выбранному пункту меню, что может вызывать, по меньшей мере, недоумение пользователя. Чтобы исправить это, обработайте событие MouseLeave для элементов меню Выход, О программе, День недели и Текущее время. Но вместо генерирования нового обработчика события для каждого элемента, позвольте всем указанным элементам вызывать один метод с именем SetReadyPrompt().

private void SetReadyPrompt(object sender, EventArgs e) { toolStripStatusLabelMenuState.Text = "Ожидание действий пользователя."; }

В результате вы должны обнаружить, что первая панель возвращается к отображению этого типового сообщения, как только курсор мыши покидает пределы любого из четырех указанных выше элементов меню.

Исходный код. Проект StatusBarApp размещен в подкаталоге, соответствующем главе 19.

Работа с ToolStrip

Тип ToolStrip в .NET2.0 предлагается использовать вместо типа ToolBar, предлагавшегося в рамках .NET 1.x и теперь считающегося устаревшим. Вы знаете, что панели инструментов обычно обеспечивают альтернативный способ активизации соответствующих пунктов меню. При щелчке пользователя на кнопке Сохранить, результат будет тем же, что и при выборе Файл→Сохранить из меню. Подобно MenuStrip и StatusStrip, тип ToolStrip может содержать множество разных элементов панели инструментов (возможности использования некоторых из них вы уже видели в предыдущих примерах).

• ToolStripButton

• ToolStripLabel

• ToolStripSplitButton

• ToplStripDropDownButton

• ToolStripSeparator

• ToolStripComboBox

• ToolStripTextBox

• ToolStripProgressBar

Подобно другим элементам управления Windows Forms, ToolStrip поддерживает встроенный редактор, который позволяет быстро добавить стандартные типы кнопок (File, Exit, Copy, Paste и т.д.), изменить поведение стыковки и встроить ToolStrip в ToolStripContainer (подробнее об этом чуть позже). Возможности поддержки ToolStrip в режиме проектирования демонстрируются на рис. 19.20.

Рис. 19.20. Возможности режима проектирования для ToolStrip

Подобно MenuStrip и StatusStrip, индивидуальные элементы управления ToolStrip добавляются во внутреннюю коллекцию ToolStrip с помощью свойства Items (элементы). Если щелкнуть на ссылке Insert Standard Items (Вставить стандартные элементы) встроенного редактора ToolStrip, то в метод InitializeComponent() будет добавлен массив производных от ToolStripItem типов, представляющих соответствующие элементы.

private void InitializeComponent() {

 …

 // Автоматически генерируемый программный код

 // для подготовки ToolStrip.

 this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {

  this.newToolStripButton, this.openToolStripButton,

  this.saveToolStripButton, this.printToolStripButton,

  this.toolStripSeparator, this.cutToolStripButton,

  this.copyToolStripButton, this.pasteToolStripButton,

  this.toolStripSeparator, this.helpToolStripButton });

 …

}

Чтобы продемонстрировать работу с ToolStrip, в следующем приложении

Windows Forms создается тип ToolStrip, содержащий два типа ToolStripButton (с именами toolStripButtonGrowFont и toolStripButtonShrinkFont), тип ToolBarSeparator и тип ToolBarTextBox (с именем toolStripTextBoxMessage).

Конечный пользователь получает возможность ввести сообщение, которое будет отображено в окне формы с помощью ToolBarTextBox, а два типа ToolBarButton используются для того, чтобы увеличить или уменьшить размер шрифта. На рис. 19.21 показано результирующее окно проекта, который мы с вами собираемся построить.

Рис. 19.21. Приложение ToolStripApp в действии

1 ... 171 172 173 174 175 176 177 178 179 ... 259
На этой странице вы можете бесплатно читать книгу ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен бесплатно.
Похожие на ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - Эндрю Троелсен книги

Оставить комментарий