Delphi: как работать с двумя формами

В моей программе Delphi мне нужны две формы. Один с основной программой и один с настройками для первой формы. В форме настроек мне нужно переписать переменные из основной формы, а в основной форме мне нужно знать значения переменных и объектов (таких как кнопки, переключатели, флажки) из формы настроек. Как я могу объявить обе формы?


person fezjo    schedule 07.05.2014    source источник
comment
Для всей информации, совместно используемой двумя формами, создайте тип записи, содержащий данные. Заполните запись в основной форме и передайте ее через метод или свойство формы настройки перед вызовом showmodal формы настроек. Метод/свойство настройки заполняет форму настройки значениями записи. Если модальный результат в порядке в настройке формы события OnClose, поместите полученные значения обратно в запись. Доступ к записи теперь можно получить из главной формы до того, как форма настроек будет уничтожена.   -  person LU RD    schedule 08.05.2014


Ответы (1)


Вы можете объявить единицы измерения после ключевого слова «реализация».

Например

unit Unit1;
interface
uses Classes, Forms ...;

type
  TForm1=class(TForm)
  .....
  end;

  implementation
  uses Unit2;

  TForm1.Method;
  begin
    Form2.value := something; 
  end;

во втором блоке

unit Unit2;
interface
uses Classes, Forms ...;

type
  TForm2=class(TForm)
  .....
  end;

  implementation
  uses Unit1;

  TForm2.Method;
  begin
    Form1.value := something; 
  end;
person SyWo    schedule 07.05.2014
comment
Это совершенно неправильно. Жестко закодировав конкретную переменную Form2 в методах TForm1 и конкретную переменную Form1 в TForm2, вы сделаете невозможным использование любой из них из любой другой формы или места в вашем коде. Никогда не привязывайте методы класса к конкретным глобальным переменным. Вопрос, который я связал как дубликат, имеет гораздо лучшее решение проблемы, чем этот. - person Ken White; 08.05.2014
comment
Конечно, но вопрос был на очень базовом уровне, поэтому в ответе также есть базовое решение. Я работаю над большими проектами, поэтому знаю, что такое решение не может быть использовано в таком случае. - person SyWo; 08.05.2014
comment
Извините, но плохое решение не является ответом только потому, что это простой способ. Этот ответ просто неверен. Единственная причина, по которой я еще не проголосовал за это, заключается в том, что вы здесь новичок, и я пытался быть милым. :-) - person Ken White; 08.05.2014
comment
Я тебя понимаю на сто процентов! Не знаю, подходящее ли это место для обсуждения. Конечно, на эту тему, наверное, можно написать книгу. Вам не кажется, что лучше сначала понять программирование на простых примерах? В любом случае спасибо за совет. Это правда, что я новичок в stackoverflow. Но программирую в Delphi и не только Delphi с 18 лет :-). - person SyWo; 08.05.2014