Заметьте, что в библиотеке .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;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.