Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

pragma once Hard / Занятие 12

.doc
Скачиваний:
14
Добавлен:
13.03.2015
Размер:
95.23 Кб
Скачать

Работа с несколькими формами

Пример 12.1. Работа с несколькими формами.

Приложение может содержать несколько форм. Чтобы добавить к проекту еще одну форму выполните команду меню Проект\Добавить новый элемент или в окне Обозреватель решений команду контекстного меню проекта Добавить\ Создать элемент, в появившемся окне выбрать элемент Форма Windows Form.

Форма может быть выведена на экран в двух режимах: модальном и немодальном. Если форма выведена как модальная, то мы не сможем работать с другими формами до тех пор, пока модальная форма не будет закрыта. Немодальные формы позволяют переключаться между формами, не закрывая их.

Чтобы отобразить форму как немодальное диалоговое окно нужно использовать метод Show. Если после метода Show в функции имеется какой-либо код, то он будет выполнен. Вы сможете работать с окном только после завершения выполнения этой функции. Метод Close закрывает форму. В случае немодальной формы все ресурсы, созданные внутри этой формы, также закрываются, а сама форма удаляется. Чтобы убрать форму с экрана, не удаляя ее, следует использовать метод Hide.

Чтобы отобразить форму в модальном режиме используется метод ShowDialog. При выводе модальной формы код, следующий после метода ShowDialog, не выполняется до тех пор, пока эта форма не будет закрыта. Метод Close закрывает форму, но не удаляет ее. Удаляется форма с помощью метода Dispose.

При работе с модальными формами имеется возможность узнать, каким образом было закрыто окно. Для этого используется свойство DialogResult модальной формы. Возможные значения свойства определены в перечислении DialogResult: .None (значение, которое означает, что модальное диалоговое окно продолжает свою работу), OK, Cancel, Abort, Retry, Ignore, Yes, No. Свойство определяет возвращаемое значение метода ShowDialog, Установка значения свойства приводит к тому, что модальная форма скрывается, и управление возвращается вызывающей форме. Если окно закрывается с помощью кнопки Закрыть в правом верхнем углу формы, то свойство DialogResult будет иметь значение Cancel.

Для установки свойства DialogResult формы обычно используется элемент управления Button, у которого тоже есть свойство DialogResult. Если значение свойства не None, то нажатие на кнопку приводит к закрытию формы, а значение свойства DialogResult кнопки назначается свойству DialogResult формы. Например, чтобы создать диалоговое окно с кнопками "Да", "Нет" и "Отмена", достаточно добавить в форму три кнопки и задать их свойствам DialogResult значения Yes, No и Cancel.

Создадим приложение, в котором имеются 3 формы:

Из главной формы (Form1) вызываются 2 другие формы: Form2 – в немодальном режиме, Form3 – в модальном режиме. Значение из Form1 передается в эти формы. В Form3 мы можем изменить значение и вернуть его в Form1. Полученное значение будет выводиться в поле «новое значение».

В h-файл главной формы (Form1) в самом начале перед командой namespace нужно поместить директивы:

#include "Form2.h"

#include "Form3.h"

Для Form1 обработайте события Click кнопок:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

//открытие Form2

Form2^ f2=gcnew Form2();

f2->textBox1->Text= this->textBox1->Text;

f2->Show();

MessageBox::Show("Выведена Form2");

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

//открытие Form3

Form3^ f3=gcnew Form3();

f3->textBox1->Text= this->textBox1->Text;

f3->ShowDialog();

if ( f3->DialogResult == ::DialogResult::OK )

this->textBox2->Text=f3->textBox1->Text;

delete f3;

}

Form2 и Form3 – это классы, описанные в файлах Form2.h и Form3.h. Чтобы мы могли присвоить значение элементам textBox1 этих классов в другом классе, необходимо, чтобы соответствующие поля были открытыми (по умолчанию они private). Измените описание поля textBox1 в этих классах на

public: System::Windows::Forms::TextBox^ textBox1;

В файле Form2.h также обработайте событие Click кнопки:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

this->Close(); //закрывает форму

}

В форме Form3 для кнопки установите значение свойства DialogResult равным OK. Обработчик события Click в этом случае создавать не нужно.

Задание: создайте диалоговое окно для ввода пароля, имеющее текстовое поле и 2 кнопки (Ввод и Отмена), и окно, позволяющее задать вопрос, с 3 кнопками (Да, Нет, Отмена), не используя стандартные диалоговые окна.

Указание: чтобы в текстовом поле скрыть пароль, установите свойство PasswordChar равным, например, «*». В этом случае в текстовом поле будет выводиться строка звездочек, а свойство Text по-прежнему будет содержать введенный текст.

Соседние файлы в папке pragma once Hard