Исследование MS Visual С#, страница 18

Заметьте, что в библиотеке .NET Framework Classes существуют два класса с именем ListBox: один в пространстве имен Windows.Forms, а другой — в пространстве имен Web.UI.WebControls. Первый — поддерживает функциональность списка, размещенного в оконной форме, а второй — на Web-странице. Чтобы не спутать их, помните, что они расположены на разных вкладках панели Toolbox.

В процессе вставки элементов следует определять их свойства с помощью строк таблицы окна Properties. Большинство свойств надо оставлять такими, какими они были по умолчанию. Обычно приходится изменять лишь одно свойство (Name). Оно идентифицирует элемент и позволяет им управлять.

Тип

элемента

Рядом с меткой

Имя элемента,

свойство (Name)

Другие свойства

Text Box

Имя:

tName

Text = пусто

Text Box

Профессия:

tProf

Text = пусто

Text Box

Телефон:

tPhone

Text = пусто

Text Box

Адрес:

tAddr

Text = пусто

Label

Не найден

sNotFound

Text = Не найден

Label

Количество

sTotal

Text = 0

Button

Добавить

bAdd

Text = Добавить

Button

Найти

bFind

Text = Найти

Button

Сохранить

bSave

Text = Сохранить

Button

Удалить

bDel

Text = Удалить

Button

Отмена

bUndo

Text = Отмена

Button

Прочесть

bOpen

Text = Прочесть

Button

Выход

bClose

Text = Выход

ListBox

list

Sorted = True

Измените два свойства самой формы. Свойству Text: присвойте значение типа «Список сотрудников». Для свойства AcceptButton: выбирите идентификатор кнопки bAdd. Это делает кнопку Добавить кнопкой по умолчанию. Теперь, нажав клавишу Enter, пользователь вызовет реакцию системы, равносильную нажатию кнопки Добавить.

Пользователи нашего приложения при вводе информации в окна редактирования (элементы типа Text Box), возможно, будут пользоваться клавишей табуляции Tab, как делают многие из нас. Для того, чтобы при этом фокус ввода переходил из окна в окно в разумной последовательности, следует правильно задать свойство TabIndex для тех элементов управления, состояние которых действительно изменяется пользователем. Не забывайте следить за этим свойством в процессе создания элементов. Задайте TabIndex равнм нулю для окна редактирования tName. Следующие окна редактирования, а затем и другие элементы, должны постепенно увеличивать значение индекса. Для текстовой метки (Label) sNotFound задайте свойство Text = Не найден. Для окон редактирования это свойство следует сделать пустым. Такое решение позволяет сократить код конструктора класса. Добавьте в конструктор следующие строки.

sNotFound.Hide(); // Скрываем текст "Не найден"

bUndo.Enabled = false;   // Кнопка "Отмена" сначала недоступна

Реакция на нажатие кнопки

Для каждого элемента существует одно сообщение, точнее, один уведомляющий код, который считается наиболее вероятным. Если вы дважды щелкните над элементом, то инструмент студии создает остов функции обработки именно этого события. Для кнопок таким событием является ее нажатие (Click). Дважды щелкните над кнопкой Добавить (bAdd) и мастер создаст функцию обработки события Click. Заполните ее следующими кодами.

private void bAdd_Click (object sender, EventArgs e)

{

if (tName.Text.Length != 0) // Если введено имя

{

  int id = Add();    // Вызываем функцию вставки данных в список

  tName.Focus();      // Переводим фокус в окно ввода имени

  if (id == -1)         // Если функция вернула –1, то вставка не удалась

     return;

  bModified = true;  // Данные изменились

}

  //=== Корректируем текст который выводит количество элементов в списке

sTotal.Text = list.Items.Count.ToString();

}

Первым параметром этой функции (object sender) на самом деле является объект bAdd класса Button. Код для его создания был помещен в класс Form1 в тот момент, когда вы разместили на форме кнопку Добавить. Объявление объекта можно найти в блоке кодов, спрятанном под маркером Windows Form Designer generated code. Нашей реакцией на нажатие кнопки Добавить будет вызов вспомогательной функции Add. Эта функция понадобится нам и в другом сценарии, когда данные списка будут вычитываться из файла.

Введите  в состав класса Form1 метод Add, который вставляет строку с данными о сотруднике в коллекцию объектов. Каждый объект класса ListBox имеет свою собственную коллекцию текстовых строк. Говорят, что коллекция ассоциирована с элементом типа ListBox. Многие другие компоненты .NET также связаны с коллекциями объектов. В теле функции Add следует предусмотреть попытку повторной вставки данных о человеке, который уже есть в списке.

private int Add()

{

int id = list.FindString(tName.Text); // Поиск строки, начинающейся с tName.Text

if (id != ListBox.NoMatches)    // Если нашли, то предупреждаем о замене

{

  if (MessageBox.Show("В списке уже есть:  " +

     tName.Text + ".  Заменить?", "Замена",

     MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)

     list.Items.RemoveAt(id);

  else

     return -1;

}

string add = tName.Text + ";   " + tProf.Text+";  Tel: "

  + tPhone.Text + ";  Addr: " + tAddr.Text; // Формируем запись

id = list.Items.Add (add);// Вставляем ее в коллекцию Items списка ListBox

list.SelectedIndex = id; // Активизируем новую строку списка

return id;

}