Как общаться между формами

Модальные формы предлагают особые функции, которые мы не можем иметь при отображении немодально. Чаще всего мы будем отображать форму модально, чтобы изолировать ее процессы от всего, что могло бы произойти в основной форме. После завершения этих процессов вы можете узнать, нажал ли пользователь кнопку «Сохранить» или «Отмена», чтобы закрыть модальную форму. Вы можете написать интересный код для достижения этой цели, но это не должно быть трудным. Delphi предоставляет модальным формам свойство ModalResult, которое мы можем прочитать, чтобы узнать, как пользователь вышел из формы.

Следующий код возвращает результат, но вызывающая подпрограмма игнорирует его:

вар
F: TForm2; начать
F: = TForm2.Create (ноль); 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); вар f: TForm2; начать
f: = TForm2.Create (ноль); пытатьсяесли е. ShowModal = mrOk тогда
Надпись: = «Да»
еще
Подпись: = «Нет»; наконец
е. Выпуск; конец; конец;

Теперь выберите дополнительную форму. Дайте ему две кнопки TBT с пометкой «Сохранить» (Имя: «btnSave»; Надпись: «Сохранить») и другая «Отмена» (Имя: «btnCancel»; Подпись: «Отмена»). Выберите кнопку Сохранить и нажмите F4, чтобы вызвать Инспектор объектов, прокрутите вверх / вниз, пока не найдете свойство ModalResult и установите его на MROK. Вернитесь к форме и нажмите кнопку «Отмена», нажмите F4, выберите свойство ModalResult и установите для него значение mrCancel.

Это так просто. Теперь нажмите F9, чтобы запустить проект. (В зависимости от настроек среды Delphi может предложить сохранить файлы.) Когда появится основная форма, нажмите кнопку Button1, которую вы добавили ранее, чтобы отобразить дочернюю форму. Когда появится дочерняя форма, нажмите кнопку «Сохранить», и форма закроется, вернувшись к основной заметке формы, в заголовке которой указано «Да». Нажмите кнопку основной формы, чтобы снова вызвать дочернюю форму, но на этот раз нажмите кнопку «Отмена» (или пункт «Закрыть» в системном меню, или кнопку [x] в области заголовка). Заголовок основной формы будет читать «Нет».

Как это работает? Чтобы узнать об этом, посмотрите на событие Click для TButton (из StdCtrls.pas):

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

Что происходит, так это то, что владелец (в этом случае вторичная форма) TButton получает свой набор ModalResult в соответствии со значением ModalResult TButton. Если вы не установите TButton. ModalResult, тогда значением является mrNone (по умолчанию). Даже если TButton помещен в другой элемент управления, родительская форма все еще используется для установки его результата. Последняя строка затем вызывает событие Click, унаследованное от его класса-предка.

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

В функции ShowModal TForm, непосредственно после отображения формы, запускается цикл Repeat-To, который продолжает проверять, чтобы переменная ModalResult стала значением больше нуля. Когда это происходит, окончательный код закрывает форму.

Вы можете установить ModalResult во время разработки, как описано выше, но вы также можете установить свойство ModalResult формы непосредственно в коде во время выполнения.

instagram story viewer