Это не так уж сложно, если вы понимаете объектную модель Delphi. Форма — это объект, производный от TObject, поддерживаемый файлом DFM, чтобы упростить настройку макета. Элементы управления на нем — это другие объекты, и по умолчанию они общедоступны для других объектов из других юнитов, как и другая ваша форма. Есть два способа сделать это.
Самый простой способ — заставить код вашей другой формы считывать значения из элементов управления сразу после того, как вы закончите с первой формой. Просто используйте такие вещи, как MyString := Form2.EditBox.Text;
. Это не особенно хороший стиль, но он работает.
Правильный способ сделать это — либо поместить в форму общедоступные свойства, которые будут извлекать значения элементов управления, либо функцию, которая будет их читать и возвращать какой-то объект или запись, содержащую все настройки. Это требует немного больше работы, но в результате получается более чистый код, который с меньшей вероятностью вызовет проблемы, если вы будете что-то изменять в будущем.
РЕДАКТИРОВАТЬ: В ответ на вопрос в комментарии:
Чтобы одна форма отображала и скрывала другую, вы вызываете для нее функцию Показать и скрыть. Или, если вы хотите, чтобы он отображался в модальном диалоговом окне, вызовите метод ShowModal, который позаботится о сокрытии за вас, пока вы создаете кнопку, которая устанавливает ModalResult. (Подробнее о том, как работают эти методы, см. в файле справки.)
Конечно, форма должна быть создана в первую очередь. Либо он может быть создан DPR автоматически, что хорошо для простых программ, но не так хорошо, когда в вашем приложении много форм, либо вы можете создать его в коде. У Хенка есть пример того, как это сделать, хотя я бы не рекомендовал использовать ключевое слово with. И если вы создали форму самостоятельно, обязательно освободите ее после этого.
person
Mason Wheeler
schedule
18.03.2010