Демонстрация диалогового окна
- Значение свойства Readonly для txtCity и txtHotelName установите равным true (истина).
- Измените размер формы так, чтобы на ней помещались все добавленные управляющие элементы.
- Установите значение свойства DialogResult кнопки ОК равным ОК. Точно так же установите значение этого свойства кнопки Cancel (Отмена) равным Cancel (Отмена). Сохраните изменения, сделанные в файле ChangeHotelDialog.cs.
- В файле MainAdminForm.cs временно добавьте к обработчику cmdChange_Click код, который отвечает за отображение в текстовом поле Messages (Сообщения) строк "ОК" и "Cancel" ("Отмена") в зависимости оттого, как был закрыт диалог: с помощью кнопки ОК или Cancel (Отмена).
Обратите внимание на то, что диалоговое окно отображается с помощью метода ShowDialog, а не метода Show (Показать), который используется для обычных форм. В качестве результата метод ShowDialog возвращает перечисление типа DialogResult.
private void cmdChange_Click(object sender, System.EventArgs e) { ChangeHotelDialog dig = new ChangeHotelDialog(); DialogResult status = dig.ShowDialog(); // состояние if (status == DialogResult.OK) // если (состояние == DialogResult. OK) { txtMessages.Text = "OK"; // Текст } else { txtMessages.Text = "Cancel"; // txtMessages. Текст = "Отмена"; } }
- Скомпонуйте и запустите пример. Теперь диалоговое окно уже можно открыть с помощью меню, а закрыть – с помощью любой из кнопок ОК или Cancel (Отмена), причем на экран будет выведено соответствующее сообщение. Можно проверить, что диалоговое окно является модальным, пощелкав мышью где-нибудь еще в приложении. Программа сейчас находится на шаге 2 разработки.
Передача информации между родительской формой и диалогом
Во второй части нашей демонстрации будет показано, как передавать информацию из родительской формы диалогу и как получать информацию от диалога. Для этих целей в классах .NET Framework нет встроенного механизма, но все-таки существует некоторый шаблон проектирования, которому можно следовать. В классе диалога для каждого сообщения (порции информации), которое может передаваться между родительской формой и диалогом, нужно определить некоторое свойство.
В нашем примере мы сделаем свойства City (Город) и HotelName (Название гостиницы) доступными только для записи, а свойства Rate (Стоимость) и NumberRooms – доступными для чтения и записи.
- Для того чтобы реализовать указанные свойства, добавьте к классу ChangeHotelDialog в файле ChangeHotelDialog.cs приведенный ниже код.
public string City // общедоступный строковый – Город { set { txtCity.Text = value; // txtCity. Текст = значение; } } public string HotelName // общедоступная строка HotelName { set { txtHotelName.Text = value; // txtHotelName. Текст = значение; } } public int NumberRooms { get { return Convert.ToInt32 (txtNumberRooms.Text); } set { } } public decimal Rate // общедоступная десятичная Цена { get { return Convert.ToDecimal(txtRate.Text); } set { txtRate.Text = value.ToString(); // Текст = значение } }