Задания для самостоятельного выполнения. 3.7.Добавьте возможность сортировки абонентов телефонного справочника по:
3.7.Добавьте возможность сортировки абонентов телефонного справочника по:
– имени;
– отчеству;
– улице;
– дому;
– телефону.
3.8.Добавьте возможность сортировки абонентов телефонного справочника по убыванию по любому полю.
Упражнение 13.5. Дополним приложение “Телефонный справочник” возможностью изменения текущего абонента.
Решение
1-й этап.Доработаем визуальный интерфейс приложения.
Дополним пункт меню “Абонент” подпунктом “Изменить”. При выборе этого пункта будет открываться другая форма, в ней будет отображаться текущее значение элемента списка. После того, как пользователь изменит значение необходимых полей, в список вносятся изменения – текущий элемент списка обновляется.
Форма, которая нужна для изменения абонента, практически совпадает с формой AddForm, поэтому воспользуемся уже созданной нами формой.
2-й этап.Разработаем необходимый программный код.
Для того чтобы форма AddForm “понимала”, для какой цели ее вызвали – для добавления или изменения абонента – создадим переменную типа enum – перечисление (вставьте ее описание в пространство имен namespace Lab13, например, сразу после компараторов, перед самой последней закрывающейся фигурной скобкой).
public enum AddOrEdit
{
Add,
Edit
}
Создадим обработчик выбора пункта “Изменить”.
if (PhoneNote.Count > 0)
{
// создаем запись - экземпляр класса Note
Note MyRecord = new Note();
// определяем поля записи
// (берем значения из соответствующих компонентов на форме)
MyRecord.LastName = LastNameTextBox.Text;
MyRecord.Name = NameTextBox.Text;
MyRecord.Patronymic = PatronymicTextBox.Text;
MyRecord.Phone = PhoneMaskedTextBox.Text;
MyRecord.Street = StreetTextBox.Text;
MyRecord.House = (ushort)HouseNumericUpDown.Value;
MyRecord.Flat = (ushort)FlatNumericUpDown.Value;
// создаем экземпляр формы и открываем эту форму
AddForm _AddForm = new AddForm(MyRecord, AddOrEdit.Edit);
_AddForm.ShowDialog();
// изменяем текущую запись
PhoneNote[current] = _AddForm.MyRecord;
}
PrintElement();
Поясним код. Если список не пуст, то сначала формируется запись MyRecord – значения полей считываются из соответствующих компонентов формы. Затем определяется экземпляр класса формы AddForm и открывается форма с двумя параметрами – записью MyRecord и указанием, что форма открывается для изменения записи. При закрытии формы AddForm обновляется значение текущей записи. Кроме того, в обработчике вызывается метод PrintElement(), выводящий текущий измененный элемент или, в случае пустого списка – просто очищающий поля записи MainForm.
Изменим одну строку в обработчике выбора пункта “Добавить”. При создании экземпляра класса AddForm добавим второй параметр со значением AddOrEdit.Add.
AddForm _AddForm = new AddForm(MyRecord, AddOrEdit.Add);
Теперь откроем класс формы AddForm. Добавим функциональность, связанную с изменением записи MyRecord.
Изменим конструктор класса формы AddForm:
public AddForm(Note _MyRecord, AddOrEdit MyType)
{
InitializeComponent();
MyRecord = _MyRecord;
// если форма открыта для добавления
if (MyType == AddOrEdit.Add )
{
Text = "Добавление абонента";
AddButton.Text = "Добавить";
}
else // если форма открыта для изменения записи
{
Text = "Изменение абонента";
AddButton.Text = "Изменить";
// определяем значение компонентов на форме
LastNameTextBox.Text = MyRecord.LastName;
NameTextBox.Text = MyRecord.Name;
PatronymicTextBox.Text = MyRecord.Patronymic;
PhoneMaskedTextBox.Text = MyRecord.Phone;
StreetTextBox.Text = MyRecord.Street;
HouseNumericUpDown.Value = MyRecord.House;
FlatNumericUpDown.Value = MyRecord.Flat;
}
}
Поясним код. Конструктор анализирует, зачем форма была открыта. Если для добавления, то в конструкторе выполняется лишь определение значений свойства Text для самой формы и кнопки. Если же форма была открыта для изменения записи, то кроме изменения свойства Text для формы и кнопки, также выполняется заполнение соответствующих элементов формы значениями полей записи MyRecord, полученной в параметрах формы.
Обработчик нажатия на кнопку изменять не нужно.
Запустите приложение. Проверьте, правильно ли выполняется изменение записи и не “навредили” ли мы добавлению записи.