Задания для самостоятельного выполнения. 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, полученной в параметрах формы.

Обработчик нажатия на кнопку изменять не нужно.

Запустите приложение. Проверьте, правильно ли выполняется изменение записи и не “навредили” ли мы добавлению записи.