В библиотеке.NET нет специального класса для представления диалоговых окон. Вместо этого устанавливаются определенные значения свойств в классе обычной формы. В диалоговом окне можно располагать те же элементы управления, что и на обычной форме. Диалоговое окно характеризуется:
□ неизменяемыми размерами (FormBorderStyle = FixedDialog);
□ отсутствием кнопок восстановления и свертывания в правом верхнем углу за
головка формы (MaximizeBox = False, MinimizedBox = False);
□ наличием кнопок наподобие ОК, подтверждающей введенную информацию,
и Cancel, отменяющей ввод пользователя, при нажатии которых окно закры
вается (AcceptButton = имя_кнопки_ОК, Cancel Button = имя_кнопки_Сапсе1);
□ установленным значением свойства DialogResult для кнопок, при нажатии ко
торых окно закрывается.
Для отображения диалогового окна используется метод ShowModal, который формирует результат выполнения из значений перечисления DialogResult, описанных в табл. 14.5. Если пользователь закрыл диалоговое окно щелчком на кнопке наподобие ОК, введенную им информацию можно использовать в дальнейшей работе. Закрытие окна щелчком на кнопке вроде Cancel отменяет все введенные данные. Диалоговое окно обычно появляется при выборе пользователем некоторой команды меню на главной форме.
|
|
В листинге 14.6 приведен пример простого приложения, содержащего две формы. На главной форме (рис. 14.11) расположено меню из двух команд — Dialog и Exit. При выборе команды Dialog появляется диалоговое окно, включающее метку Введите информацию, поле ввода текста и две кнопки, ОК и Cancel (рис. 14.12).
Рис. 14.11. Главное окно приложения с меню и диалоговым окном
Рис. 14.12. Диалоговое окно
Если пользователь введет текст в диалоговое окно и закроет его щелчком на кнопке ОК, этот текст отобразится в поле метки в главном окне. Если диалоговое окно будет закрыто щелчком на кнопке Cancel, поле метки останется неизменным.
Добавление в проект второй формы выполняется выбором в меню команды Project ► Add Windows Form. Начнем визуальное проектирование с этой формы. Значения свойств компонентов, установленных с помощью окна свойств, перечислены в табл. 14.10.
Таблица 14.10. Значения свойств элементов формы
Элемент Свойство Значение
Метка Text Введите информацию
TextAlign MiddleCenter
Поле ввода Text Пустое значение
Кнопка Name btnOK
DialogResult OK
Text OK
Кнопка Name btnCancel
DialogResult Cancel
Text Cancel
Форма AcceptButton btnOK
CancelButton btnCancel
FormBorderStyle FixedDialog
MaximizeBox False
MinimizeBox False
StartPosition CenterParent
Пользователь вводит информацию в поле ввода textBox1, которое является закрытым элементом формы. Чтобы получить значение свойства Text поля ввода, добавим в описание класса свойство Info. Это единственное дополнение, которое вносится в шаблон текста класса формы:
|
|
public class Form2: Form
{
private Label label1;
private TextBox textBox1;
private Button btnOK;
private Button btnCancel;
private Container components = null;
public string Info
{
get
{
return textBox1.Text;
}
}
}
Визуальное проектирование главной формы еще проще, чем первой, и сводится к размещению главного меню и метки. Для наглядности метка окружена рамкой (BorderStyle = FixedSingle). Вот как выглядят обработчики событий для пунктов меню:
private void menuItem1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(); // создание экземпляра класса окна
if (f.ShowDialog() == DialogResult.OK) // отображение окна
label1.Text = f.Info;
}
private void menuItem2_Click(object sender. EventArgs e)
{
Close(); // закрытие главного окна
}
Как видите, для отображения диалогового окна следует создать экземпляр объекта соответствующей формы, а затем вызвать для этого объекта метод ShowDialog. При подтверждении ввода текст пользователя можно получить с помощью свойства Info, доступного только для чтения. При необходимости передавать информацию не только из диалогового окна, но и в него, можно добавить в описание свойства часть set.
ПРИМЕЧАНИЕ
Следует различать процесс создания формы — объекта класса Form или его наследника — от процесса вывода формы на экран. Форма, как и любой объект, создается при выполнении операции new с вызовом конструктора. Для вывода формы служит метод Show или ShowDialog класса Form, вызываемый соответствующим объектом. Для скрытия формы используется метод Hide. Фактически, методы Show и Hide изменяют свойство Visible объекта. Разница между скрытием формы методом Hide и ее закрытием методом Close состоит в том, что первый из них делает форму невидимой, но не изменяет сам объект, а метод Close делает объект недоступным и закрывает все его ресурсы.