Delphi: Как да работим с две форми

В моята програма Delphi имам нужда от две форми. Един с основна програма и един с настройки за първа форма. Във формуляра за настройки трябва да пренапиша променливи от основния формуляр, а в основния формуляр трябва да знам стойностите на променливите и обектите (като бутони, полета за избор, полета за отметка) от формуляра за настройки. Как мога да декларирам и двата формуляра?


person fezjo    schedule 07.05.2014    source източник
comment
За цялата информация, която се споделя между двата формуляра, създайте тип запис, съдържащ данните. Попълнете записа в основния формуляр и преминете през метод или свойство на формуляр за настройка, преди да извикате showmodal на формуляра за настройки. Методът/свойството за настройка попълва формуляра за настройка със стойностите на записа. Ако modalresult е ок във формуляра за настройка на събитието 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