Элементы управления Data в приложениях на C#
Окончательное оформление формы, связанной с данными
В форме ввода данных должны быть предусмотрены не только основные средства обработки данных, но и учтены такие второстепенные нюансы, как возможность запретить или разрешить использование элементов управления с учетом тех операций, которые выполняются в настоящий момент с записью. Нужно своевременно включать или отключать важные кнопки, чтобы пользователь в критические дни чувствовал себя защищенным - без кариеса, угрей, дурного запаха, перхоти, жирных пятен, вредных бактерий и насекомых и т.д. и т.п.
На данном этапе наша форма обеспечивает выполнение основной части важнейших функций обработки данных. Но пользователи могут плохо ориентироваться в том, когда им разрешено выполнять определенные операции с кнопками.
В этом разделе мы реализуем следующие функции в нашем приложении:
- Разрешение или запрещение свойства Enabled кнопок btnSave, btnCancel, btnNew и btnDelete в соответствующих состояниях программы, когда нажатие на них может быть нежелательно.
- Добавление кнопки для закрытия формы.
- Ввод определенного кода в обработчик события Closing формы, который перед завершение программы позволяет проверить, внесены ли изменения в текущую запись, и нужно ли их в таком случае сохранить.
Начнем с того, что откорректируем две ранее созданные нами функции RefreshIndividual() и ActivateEditing(). Затем обеспечим проверку того, была ли выбрана запись в списке заказчиков lstCustomers. В случае отрицательного ответа должно быть запрещено применение двух кнопок, btnEdit и btnDelete. Если же запись в списке заказчиков выбрана, то эти две кнопки должны быть разрешены и обновлено содержимое текстовых полей набором данных dsCustomerIndividual.
-
Разместите
в конце тела функций RefreshIndividual() и ActivateEditing() код
управления доступностью кнопок, как приведено ниже
//*****************************************************************
// Обновление отдельного набора данных
private void RefreshIndividual()
{
......................................................
// Изменить свойство доступности кнопок
if(lstCustomers.SelectedIndex == -1)
{
btnEdit.Enabled = false;
btnDelete.Enabled = false;
}
else
{
btnEdit.Enabled = true;
btnDelete.Enabled = true;
}
}
//*****************************************************************
// Функция изменения свойств текстовых полей
private void ActivateEditing(bool bEnable)
{
......................................................
// Разрешить или запретить применение соответствующих кнопок
btnEdit.Enabled = !bEnable;
btnNew.Enabled = !bEnable;
btnDelete.Enabled = !bEnable;
btnCancel.Enabled = bEnable;
btnSave.Enabled = bEnable;
// Установить фокус ввода на первое текстовое поле CustomerID
if(bEnable)
txtCustomerID.Focus();
}
Листинг
5.11.
Код управления доступностью кнопок
-
Разместите
внизу формы кнопку завершения работы приложения и назначьте
ей свойства Name=btnClose; Text=C&lose
-
Создайте
обработчик для кнопки btnClose и заполните
его кодом так
//*****************************************************************
private void btnClose_Click(object sender, System.EventArgs e)
{
this.Close();
}
Листинг
5.12.
Обработчик кнопки Close
Теперь пришла пора создать обработчик события Closing формы. В нем нужно проверить состояние кнопки btnSave в момент закрытия приложения. Если она доступна, значит существуют несохраненные изменения данных. В этом случае нужно спросить у пользователя, желает ли он сохранить внесенные изменения.
-
Перейдите
в режим Design, откройте панель Properties и в раскрывающемся
списке установите текущим элемент формы Form5. Затем в режиме Events панели Properties найдите событие Closing и двойным
щелчком на поле значений создайте для него обработчик
-
Заполните
обработчик следующим кодом
//*****************************************************************
private void Form5_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(!btnSave.Enabled) return; // Ничего не надо - все сохранено!
string caption = "Сохранение результатов редактирования";
string message = "Хотели бы Вы сохранить текущие изменения?";
MessageBoxButtons buttons = MessageBoxButtons.05_57No;
DialogResult result;
// Вывести пользователю предупреждение.
result = MessageBox.Show(this, message, caption, buttons);
// Проанализировать выбор пользователя
if(result == DialogResult.No) return; // Не желает сохранять
// Пытаемся сохранить
try
{
SaveRecord();
}
catch(Exception saveException)
{
caption = "Ошибка записи данных";
message = "Произошла следующая ошибка:\n"
+ saveException.Message
+ "\nПродолжить закрытие формы?";
// Вывести пользователю предупреждение.
result = MessageBox.Show(this, message, caption, buttons);
// Проанализировать выбор пользователя
if(result == DialogResult.No)
e.Cancel = true; // Прекратить закрытие формы
// e - аргумент этого обработчика
}
}
Листинг
5.13.
Обработчик события закрытия формы
-
Добавьте
в конструктор формы Form5() вызов
нашей функции начальной загрузки списка данными
public Form5()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
LoadList();
}
Листинг
5.14.
Код начальной загрузки списка данными
-
Постройте
приложение и проверьте заложенную в нем функциональность

