Разработка приложений на языке C#. Полезные настройки. Особые спецификаторы формата, страница 42

    lblName.Text = ((Person)cm.Current).Name;

Последнее присвоение синхронизирует текст метки с текущим значением списка. В момент появления окна текст будет отображать имя первого объекта в списке list. Для того, чтобы ожили четыре кнопки управления перемещением по строкам таблицы DataGridView, введите в обработчик события ItemClicked код, отслеживающий текущую позицию и синхронизирующий текст метки lblName.

void toolStrip_ItemClicked (object sender, ToolStripItemClickedEventArgs e)

{

//==== Свойство Position синхронизатора смещает текущую позицию — Current

switch (e.ClickedItem.Text)

{

  case "First": cm.Position = 0; break;

  case "Prev":  cm.Position--; break;

  case "Next":  cm.Position++; break;

  case "Last":  list.Count - 1; break;

}

lblName.Text = ((Person)cm.Current).Name;// Синнхронизация текста метки

}

Запустите и убедитесь, что таблица управляется с помощью кнопок и правильно отслеживается позиция. Это подтверждается текстом в поле lblName. Для того, чтобы сделать это поле более информативным, введите в класс Person метод ToString, забытый нами при переносе кода класса из ранней версии.

public override string ToString()// Переопределение виртуальной функции, наследованной от класса Object

{

return name.PadRight(15) + "; Age: " + age;

}

Теперь замените строку:         lblName.Text = ((Person)cm.Current).Name; на lblName.Text = ((Person)cm.Current).ToString(); и проверьте работу кнопок перемещения. Проверьте, есть-ли синхронизация при перемещении по grid с помощью мыши или клавиш.

Механизм DataBinding

Рассмотренный тип синхронизации не является автоматическим. Мы отслеживаем события нажатия кнопок и вручную изменяем свойства метки. Мы не отслеживаем перемещения по grid с помощью клавиш (®, и т. д.), а также с помощью мыши. Механизм DataBinding позволяет автоматизировать процесс слежения за перемещениями по DataGridView при любом способе перевода фокуса (кнопки, мышь, или клавиши). Покажем, как это делается. Уберите два вхождения операторов:

lblName.Text = ((Person)cm.Current).Name;// Синнхронизация текста метки

Вместо этого включите механизм Simple DataBinding. Это делает всего одна строка кода.

lblName.DataBindings.Add ("Text", list, "Name");

Вставьте ее в MainForm_Load и проверьте работу приложения при переводе фокуса в различные ячейки grid всеми мыслимыми способами. Замените третий параметр "Name" на "Phone", или имя любого другого свойства класса Person, и вновь проверьте работу механизма слежения (DataBinding). Любопытно, что имя свойства привязки (третий параметр метода Add) можно задать пустым "". В этом случае механизм привязки использует метод ToString() класса Person. Проверьте этот вариант.

Задание

Дальнейший ход развития функциональности очевиден. Вы должны добавить кнопки управления, которые задействуют файловые операции. Добавьте кнопку поиска, который надо сначала произвести в списке list, а затем синхронизировать grid с помощью объекта CurrencyManager. Для этого достаточно установить его свойство Position в то значение, которое соответствует найденному элементу. Это действие приведет в соответствие текущую позицию Current. Заметьте, что свойство Current элемента CurrencyManager доступно только для чтения, поэтому его нельзя изменить явным, или программным способом. Изменять следует свойство Position.

Размышления на тему: "Стиль программирования"

Образец глупости от Microsoft (см. курс: Developing Microsoft .NET Applications for Windows Visual C# .NET, с. 393).

if (TextLine != null)

{

e.HasMorePages = true;

}

else

{

e.HasMorePages = false;

}

А как надо?

e.HasMorePages = TextLine != null;   // bool — он и в Африке bool

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

·  Во-первых, когда в левой части вы видите has... или is..., то справа уже должны ожидать выражение типа bool,