Разработка gui. Создание sdiприложений обработка событий
![]()
|
Создание менюДобавим в приложение SocOpros простое меню для выхода из про- граммы, пункт меню File / Exit. Откройте панель инструментов Toolbox и перетащите управ- ляющий элемент MenuStrip на форму приложения. Для создания выпадающего меню File с пунктом Exit, введите File и Exit, как на рис. 3.2. В окне Properties измените названия этих пунктов меню на MenuFile и MenuExit. Добавьте код в обработчик события File / Exit. private void MenuExit_Click(object sender, EventArgs e) { Application.Exit(); } ![]() Рис. 3.2. MenuStrip для добавления в форму меню Выбор пункта меню сочетанием клавиш. В свойстве Short- cutKeys в окне Properties для пункта меню выбрать из появившегося окна нужное сочетание клавиш, для отображения рядом с названием пункта меню. Дополнительные возможности меню. В классе MenuStrip опре- делены свойства, при помощи которых можно устанавливать флажок напротив пункта меню, прятать пункты меню, делать некоторые пунк- ты меню недоступными и т. п. (табл. 3.5). Т а б л и ц а 3.5 Свойства MenuItem, обеспечивающие дополнительные возможности меню
Закрытие формы![]() щелкнуть на кнопке "X" (Закрыть) в правом верхнем углу окна; закрыть окно из системного меню в левом верхнем углу окна; закрыть окно с помощью комбинации клавиш Alt+F4; выйти из приложения с помощью меню File / Exit. Когда закрывается форма, можно остановить процедуру завер- шения: private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Do you want to close", "SocOpros", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) Application.Exit(); } Для того чтобы закрыть главное окно и не выходить из приложе- ния, обработчик меню File / Exit должен вызвать метод Сlose. private void MenuExit_Click(object sender, EventArgs e) { Close(); } Диалоговые окнаДиалоговое окно – это набор управляющих элементов, с помощью которых упрощается процесс ввода данных. Для создания простых диалоговых окон используется класс MessageBox. Более сложные диа- логовые окна создаются на основе форм. Создание модального диалогаПрограмма 5 Cоздайте новое приложение AdminForm. На форме расположите кнопки Add и Exit и 4 элемента Label для отображения информации (рис. 3.3). По щелчку на кнопке Add отображается пустая форма Add- HotelDialog.cs. Это обычная форма. Откройте файл AddHotelDialog.cs в режиме конструктора. В окне Properties установите значение свойства FormBorderStyle равным Fix- edDialog. Установите значение свойств ControlBox, MinimizeBox и Max- imizeBox равным false. Добавьте на форму текстовые поля TextBox и Label, содержащие информацию о гостинице. Кроме того, необходимо добавить кнопки ОК и Cancel (рис. 3.4). Установите значения и имена элементов в соответствии с табл. 3.6. Установите значение свойства DialogResult кнопки ОК равным ОК. Точно так же установите значение этого свойства кнопки Cancel равным Cancel.
Т а б л и ц а 3.6 Значения свойств текстовых полей и кнопок диалога AddHotelDialog.cs
В файле AdminForm.cs временно добавьте к обработчику cmdAdd_Click код, который отвечает за отображение окна диалога. Диалоговое окно отображается с помощью метода ShowDialog, а не метода Show, который используется для обычных форм. private void cmdAdd_Click (object sender, EventArgs e) { AddHotelDialog dlg = new AddHotelDialog(); dlg.ShowDialog(); } Скомпонуйте и запустите пример. Теперь диалоговое окно уже можно открыть с помощью кнопки Add, а закрыть – с помощью любой из кнопок ОК или Cancel. Можно проверить, что диалоговое окно яв- ляется модальным, пощелкав мышью где-нибудь еще в приложении. Закрыть приложение можно кнопкой Exit, добавив обработчик события: private void cmdExit_Click(object sender, EventArgs e) { if(MessageBox.Show("Do you want to close", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) { Application.Exit(); } Передача данных между диалогом и родительской формойДля этих целей в классах .NET Framework нет встроенного меха- низма. В классе диалога для каждого сообщения, которое будет пере- даваться между родительской формой и диалогом, нужно определить свойство. Добавим в класс AddHotelDialog свойства City, HotelName, Rate (Стоимость) и NumberRooms. public String City { get { return txtCity.Text; } set { txtCity.Text = value; } } public String HotelName { get { return (txtHotelName.Text); } set { txtHotelName.Text = value; } } public int Rooms { get { return Convert.ToInt32(txtNumberRooms.Text); } set { txtNumberRooms.Text = value.ToString(); } } public double Rate { get { return Convert.ToDouble(txtRate.Text); } set { txtRate.Text = value.ToString(); } } private void cmdOk_Click(object sender, EventArgs e) { Close(); } Теперь можно использовать эти свойства при закрытии диалогово- го окна с помощью кнопки ОК. private void cmdAdd_Click(object sender, EventArgs e) { AddHotelDialog dlg = new AddHotelDialog(); dlg.ShowDialog(); if (dlg.HotelName != "") { label1.Text = dlg.City; label2.Text = dlg.HotelName; label3.Text = dlg.Rooms.ToString(); label4.Text = dlg.Rate.ToString(); } else { MessageBox.Show("Введите данные", "Hotel Broker Administration", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } |