Организация взаимодействия форм

В  приложении сложно обойтись одной главной формой. Поэтому приходиться добавлять другие формы и взаимодействовать с ними.

новая форма

Для того чтобы добавить новую форму в проект заходим в пункт меню File -> New -> Form. Или нажимаем на значок создания новой формы в панели инструментов.

Добавив новую форму, она будет выглядеть также как и основная. При создании форма получит имя Form2 (число обозначает номер создаваемой формы) и связанный модуль формы Unit2. В новую форму можно добавлять компоненты также как и в главную. Но для чтобы дополнительная форма отобразилась в программе нам нужно будет создавать обработчик события.

Мы можем отображать формы в Delphi двумя способами:

  • Модально - пользователь имеет возможность работать только в одной форме и прежде чем перейти к другой, необходимо закрыть модальную форму.
  • Немодально - пользователь может одновременно работать с несколькими формами.

Для того чтобы отобразить форму модально нужно записать такой код:

 Form2.ShowModal;

для не модальной:

 Form2.Show;

При ссылке на другую форму необходимо помнить о взаимосвязи между формами и модулями. Любая форма имеет свой модуль, при создании формы Delphi автоматически создает код модуля и в процессе работы  добавляются разнообразные участки кода или пользователем или автоматически средой Delphi.

форма добавленияПоэтому модуль второй формы должен быть включен с помощью зарезервированного слова uses текущего модуля. Проще это сделать выбрав команду File -> Use Unit (файл использовать модуль). Выбрав нужный модуль ссылка на него  автоматически добавиться.

Но если мы  забудем это сделать то при компиляции программы появиться    диалоговое окно. В нем будет сказано, что первая форма использует вторую, но модуль второй формы отсутствует в списке uses модуля первой формы. Нам достаточно нажать на кнопку Yes и необходимая ссылка будет добавлена.

добавление формы

Можно также производить изменения с отдельными компонентами и свойствами другой формы.

Для закрепления материала создадим вторую форму. Присоединим модуль второй формы к первой, описанным выше способом. В первой форме расположим простую кнопку и компонент Edit. В обработчике кнопки запишем следующий код:

   Form2.Caption := Edit1.Text;
   Form2.ShowModal;

Запустив программу и нажав на кнопку, мы откроем вторую форму модально, заголовок у нее будет взят из свойства Text компонента Edit первой формы.

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

Организация взаимодействия форм: 16 комментариев

    • Для изменения второго по счету значения (устанавливается – ‘Новое значение’ компонента ComboBox1 пишем такой обработчик кнопки:

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      ComboBox1.Items[1]:= ‘Новое значение’;
      end;

  1. Я с главной формы Form1 создаю новую Form2. При свертывании Form1 свертывается и Form2. Как этого избежать?

    • так и должно быть. Можно как вариант создать 2-й проект с Form2 и вызывать его как отдельную программу…

  2. а как сделать что бы все сохранялось одним файлом, а то у меня при сохранении отдельно сохраняется или Form1 или Form2

    • Чтобы сохранялись все файлы проекта при работе с ним необходимо использовать меню: File -> Save All или с помощью клавиш нажать Shift + Ctrl + S (нажать все три клавиши одновременно).

  3. Доброго времени суток! У меня 2 формы. Я с главной(1 формы) перешёл на вторую(1 свернулась, то есть я использовал form2.show), на второй форме есть кнопка выход(close;), закрывается форма2, но 1-я свёрнута всё так же и сидит в памяти, как можно реализовать так, чтобы при нажатии закрывалась именно сама программа?

  4. Я вот создал Form1, по кнопке перехожу на Form2.
    Вопрос: Как из Edit2 что на Form2, перенести данные в Edit1 что на Form1 ?
    Спасибо!

    • Создайте обработчик события (можно кнопку).
      Подключите к Form2 Form1, как описано выше. Если этого не сделать то при запуске программа задаст вопрос, следует согласиться и нажать “Ok”/
      В обработчике события напишите следующий код:
      Form1.Edit1.Text := Form2.Edit2.Text;

  5. Вечер добрый! Подскажите, пожалуйста, вот с каким вопросом.
    Имеется dbgrid на form1. На правую кнопку мыши сделано открытие form 2. В ней отображаются дополнительные сведения о выбранном в dbgrid элементе. НО: данные на form2 изменяются только при нажатии любой кнопки на клавиатуре. Как сделать, чтобы при выборе другой строки в dbgrid сразу менялась информация и на form2.
    Надеюсь, что понятно изъяснил вопрос)))
    в программировании не силен…)

    • Как я понимаю Вы работаете с базой данных и возможно используете компонент DataSource. У него есть метод onDataChange попробуйте им воспользоваться.

  6. Здравствуйте, создал органайзер с 2 формами, первая форма главная, вторая соответственно второстепенная. В первой форме есть ShellListView1, подскажите пожалуйста как из ShellListView1 передать данные (текстовые) в форму 2 ?

    • form2.Show;//для видимости 2-й формы
      form2.edit1.text:= ShellListView1.RootFolder.PathName;
      //компонент edit1 2-й формы получает имя выбранной папки

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *