На этом шаге мы рассмотрим некоторые свойства формы.
Форма имеет большое количество методов. Рассмотрим только некоторые из методов формы.
Если закрывается главная форма, приложение закрывается. Ресурсы, занятые формой, освобождаются.
Если форма показана в модальном режиме, то приложение не может выполняться, пока форма не будет закрыта. Чтобы закрыть форму, открытую в модальном режиме, надо назначить свойству DialogResult кнопки, которая должна закрыть форму (например, ОК), и проверить это свойство на совпадение его значения с соответствующим значением такого же свойства кнопки. Дело в том, что когда метод ShowDialog() выполнится, то он возвратит именно это заданное значение свойства в свойство формы с тем же наименованием DialogResult. Это и станет сигналом того, форма была открыта в модальном режиме и ее можно закрыть.
Пример вызова форм показан на рисунке 1.
Рис.1. Вызов форм
Как вызывать из главной формы другие и как возвращаться в главну видно из текста примера, который показывает работу приложения с 3-мя формами: Forml, Form2, Form3. Из главной (стартовой) Forml вызываются остальные, причем Form2 - в модальном режиме, a Form3 в обычном (немодальном). Если Form3 можно закрывать, нажимая на кнопку Вызов Forml или на кнопку закрытия окна, и при этом все проходит успешно, то для Form2 это не имеет места: пока вы "правильно" не закроете эту форму, нажав на кнопку Вызов Forml, форма не закроется.
Отметим: чтобы формы были видны одна из другой, надо в h-файл для главной формы перед командой using namespace поместить следующие директивы препроцессора
#include "Form2.h" #include "Form3.h"
Файл Form1.h:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { //открытие Form2 System::Windows::Forms::DialogResult dr; Form2^ newDlg = gcnew Form2(); m: dr = newDlg->ShowDialog(); // Вызывается Form2 в модальном режиме. // В dr запоминается значение DialogResult. // Когда Form2 закроется, то значение ее свойства DialogResult // будет сравниваться с dr (там перед закрытием формы мы // внесем значение ОК в DialogResult) if( dr == System::Windows::Forms::DialogResult::OK ) return; else { MessageBox::Show ("Ошибка закрытия Form2"); goto m; } } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { //Вызов Form3 Form3^ f3 = gcnew Form3(); f3->Show(); } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { this->Close(); }
Файл Form2.h:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { this->DialogResult= System::Windows::Forms::DialogResult::OK; this->Close(); //закрытие Form2 }
Файл Form3.h:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { this->Close(); }
На следующем шаге мы рассмотрим рисование графиков в форме.