Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Модальные и немодальные формы

Создание и уничтожение формы

Класс форм Form

Класс Form добавляет значительную функциональность базовому классу Control. Клиентское Windows приложения может содержать одну форму или множество форм. Эти формы могут быть приложениями, основанными на Single Document Interface (SDI) или Multiple Document Interface (MDI) интерфейсе. Класс Form является производным от класса ContainerControl, который в свою очередь является производным от ScrollableControl (производный от класса Control). В связи с этим, можно понять, что форма может быть контейнером для других ЭУ и обладает возможностью выполнять скроллинг, когда клиентскую область не может полностью отобразиться в заданном окне, а также обладает многими другими свойствами, методами и событиями.

В ходе процесса создания и уничтожения формы – объекта класса Form инициируется следующая последовательность событий: 1) Load; 2) Activated; 3) Deactivated; 4) Closing; 5) Closed.

Событие Load возникает после инициализации объекта, но перед тем, как форма станет видимой на экране. При обработке данного события можно считать, что все внутренние объекты формы уже созданы. Событие Activated возникает, когда форма уже стала видимой и текущей, но пользовательская область еще не отрисована. Событие Activated возникает, когда форма перестает быть активной (при переходе пользователя к работе с другим приложением). Событие Closing возникает в процессе закрытия формы и предоставляет возможность управлять процессом закрытия приложения. Данное событие передает в качестве второго параметра объект типа CancelEventArgs, который имеет свойство Cancel. Если этому свойству задать значение true, то форма не будет закрываться. Событие Closed возникает после закрытия формы, позволяя освободить все выделенные ресурсы (закрыть файлы, закрыть соединение с базой данных). Если в программе вызывается метод Application.Exit() и имеются открытые формы, то события Closing и Closed возникать не будут.

При разработке графического интерфейса важным является понятие модального и немодального окна. Модальное окно не позволяет, если оно открыто, временно переключиться на работу с другим окном данного приложения. Выйти из модального окна можно, только закрыв его. Немодальные окна допускают параллельную работу в разных окнах приложения. Форма называется модальной или немодальной в зависимости от того, какое у нее окно. Тип открываемого окна зависит от того, какой метод для открытия формы используется. Метод Show() открывает форму как немодальную, а метод ShowDialog() – как модальную. Название метода отражает основное назначение модальных форм – они предназначены для организации диалога с пользователем, и пока диалог не завершится, покидать форму не разрешается.

Если переменная frm хранит ссылку на объект класса производного от Form, то после вызова метода frm.Show(), выполнение программы сразу переходит к следующему оператору. При вызове метода frm.ShowDialog() переход к следующему оператору программы произойдет только после закрытия формы frm. Следующий пример показывает создание формы (объект с именем MyFormClass) и ее отображение на экране:

MyFormClass frm = new MyFormClass();

frm.Show();

 

Другим отличием этих методов является то, что метод Show()не возвращает никакого значения при завершении работы, а метод ShowDialog()при завершении возвращает в качестве результата одно из значений перечисления DialogResult. Перечисление DialogResult является списком идентификаторов, поясняющих причину закрытия диалога. К основным значениям этого перечисления относятся:

Ÿ OK – работа с формой завершилась успешно (пользователь выполнил требуемую задачу);

Ÿ Cancel – работа с формой завершилась не успешно (пользователь не выполнил требуемую задачу);

Ÿ Yes – пользователь ответил утвердительно на заданный вопрос;

Ÿ No – пользователь ответил отрицательно на заданный вопрос.

 

Для того, чтобы форма вернула значение DialogResult, ее свойству DialogResult нужно задать одно из значений перечисления DialogResult или должны быть заданы свойства DialogResult у кнопок, которые вызывают закрытие формы.

Предположим, что в приложении нужно ввести номер телефона пользователя. Для этого создается форма, которая имеет текстовое поле (TextBox) ввода и две кнопки (Button); на одной написано «Сохранить», а на другой «Отменить». Тогда, если свойству DialogResult кнопки с надписью «Сохранить» задать значение DialogResult.OK, а свойству DialogResult кнопки с надписью «Отменить» задать значение DialogResult.Cancel, то если одну из них нажать, то форма становится невидимой (но не уничтожается) и в качестве результата возвращается одно из заданных значений. Отметим, что форма не уничтожается, а просто свойству Visible задается значение false. Это делается для того, чтобы можно было получить введенные пользователем данные с помощью свойств класса формы. В результате описания свойства данной диалоговой формы для номера телефона, родительская форма может получить значение, а уже затем вызвать метод Close() для закрытия формы. Ниже приведено описание данной диалоговой формы:

class Phone: Form {

TextBox txtPN = new TextBox();

Button btnOK = new Button();

Button btnCancel = new Button();

public Phone() { // конструктор

Text = "Введите номер телефона.";

Size = new Size(180, 120);

txtPN.Location = new Point(10,10);

txtPN.Size = new Size(150,10);

btnOK.Location = new Point(10,40);

btnOK.Text = "Сохранить";

btnOK.DialogResult = DialogResult.OK;

btnCancel.Location = new Point(90,40);

btnCancel.Text = "Отменить";

btnCancel.DialogResult = DialogResult.Cancel;

Controls.AddRange(

new Control[] { txtPN, btnOK, btnCancel });

}

public string PhoneNumber { // свойство класса

get { return txtPN.Text; }

set { txtPN.Text = value; }

}

}

 

Отметим, что обработчики событий для кнопок не задаются, так как для них заданы свойства DialogResult и форма будет становиться невидимой после их нажатия. В классе также описано единственное добавленное свойство PhoneNumber. Ниже показан пример вызова данного Phone диалога:

string s;

Phone frm = new Phone(); //создаем экземпляр диалога

frm.ShowDialog(); // показываем диалог

if (frm.DialogResult == DialogResult.OK)

{ s = "Номер телефона " + frm.PhoneNumber; }

else if (frm.DialogResult == DialogResult.Cancel)

{ s = "Номер телефона не введен.";}

frm.Close();

<== предыдущая лекция | следующая лекция ==>
Суб'єкти екологічного права | Стандартные диалоги
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 731; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.