Как да комуникираме между форми

click fraud protection

Модалните форми предлагат специфични функции, които не можем да имаме, когато се показва немодално. Най-често ние ще покажем форма, която да монтира изолационно нейните процеси от всичко, което иначе би могло да се случи в основната форма. След като тези процеси приключат, може да искате да знаете дали потребителят е натиснал бутона Запиши или Отказ, за ​​да затвори модалната форма. Можете да напишете интересен код, за да постигнете това, но не е необходимо да е трудно. Delphi доставя модални форми със свойството ModalResult, което можем да прочетем, за да кажем как потребителят е излязъл от формата.

Следващият код връща резултат, но рутинното извикване го игнорира:

Var
F: TForm2; започвам
F: = TForm2.Създаване (нула); F.ShowModal; F.Release; ...

Примерът, показан по-горе, просто показва формата, позволява на потребителя да направи нещо с него, след което го освобождава. За да проверим как формулярът е прекратен, трябва да се възползваме от факта, че методът ShowModal е функция, която връща една от няколко стойности на ModalResult. Промяна на линията

instagram viewer

F.ShowModal

да се

ако F.ShowModal = mrOk тогава

Имаме нужда от някакъв код в модалната форма, за да настроим каквото и да искаме да извлечем. Има повече от един начин да получите ModalResult, тъй като TForm не е единственият компонент със свойство ModalResult - TButton също има такъв.

Нека първо да разгледаме ModalResult на TButton. Стартирайте нов проект и добавете един допълнителен формуляр (Главно меню на Delphi IDE: Файл -> Ново -> Форма). Този нов формуляр ще има име „Form2“. След това добавете TButton (Име: 'Button1') към основния формуляр (Form1), щракнете двукратно върху новия бутон и въведете следния код:

процедура TForm1.Button1Click (Подател: TObject); Var f: TForm2; започвам
f: = TForm2.Create (нула); опитвамако е. ShowModal = mrOk тогава
Надпис: = 'Да'
още
Надпис: = 'Не'; накрая
е. Освободете; край; край;

Сега изберете допълнителния формуляр. Дайте му два TButtons, обозначавайки един „Save“ (Име: „btnSave“; Надпис: „Запазване“) и другото „Отказ“ (Име: „btnCancel“; Надпис: „Отказ“. Изберете бутона Save и натиснете F4, за да изведете Object Inspector, превъртете нагоре / надолу, докато намерите свойството ModalResult и задайте го на mrOk. Върнете се във формата и изберете бутона Отказ, натиснете F4, изберете свойството ModalResult и го задайте mrCancel.

Това е толкова просто като това. Сега натиснете F9, за да стартирате проекта. (В зависимост от вашите настройки на средата, Delphi може да подкани да запазите файловете.) След като се появи основната форма, натиснете бутона1, който сте добавили по-рано, за да покажете дъщерния формуляр. Когато се появи дъщерният формуляр, натиснете бутона Запиши и формулярът се затваря, след като се върнете към основната форма, обърнете внимание, че в надписа пише „Да“. Натиснете бутона на основния формуляр, за да изведете отново дъщерната форма, но този път натиснете бутона Отказ (или системното меню Затвори елемент или бутона [x] в областта с надписи). Надписът на основната форма ще гласи „Не“.

Как работи това? За да разберете, разгледайте събитието Click за TButton (от StdCtrls.pas):

процедура TButton. Кликнете; Var Форма: TCustomForm; започвам
Форма: = GetParentForm (Self); ако Форма нула тогава
Форма. ModalResult: = ModalResult; наследен Кликнете; край;

Това, което се случва, е, че собственик (в този случай вторичната форма) на TButton получава своя ModalResult набор според стойността на ModalResult на TButton. Ако не зададете TButton. ModalResult, тогава стойността е mrNone (по подразбиране). Дори ако TButton е поставен на друга контрола, родителската форма все още се използва за определяне на резултата. Последният ред след това извиква събитието Click, наследено от неговия клас прародители.

За да разберете какво се случва с Forms ModalResult, си струва да разгледате кода във Forms.pas, който трябва да можете да намерите в.. \ DelphiN \ Source (където N представлява номера на версията).

В функцията ShowModal на TForm, непосредствено след показването на формата, цикълът Repeat-Dok не се стартира, което продължава да проверява променливата ModalResult да стане стойност по-голяма от нула. Когато това се случи, крайният код затваря формата.

Можете да зададете ModalResult по време на проектиране, както е описано по-горе, но можете също да зададете свойството ModalResult на формата директно в кода по време на изпълнение.

instagram story viewer