В моята програма Delphi имам нужда от две форми. Един с основна програма и един с настройки за първа форма. Във формуляра за настройки трябва да пренапиша променливи от основния формуляр, а в основния формуляр трябва да знам стойностите на променливите и обектите (като бутони, полета за избор, полета за отметка) от формуляра за настройки. Как мога да декларирам и двата формуляра?
Delphi: Как да работим с две форми
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
Това е напълно погрешно. Като кодирате твърдо конкретната променлива
Form2
в методите на TForm1
и конкретната променлива Form1
в TForm2
, вие правите невъзможно нито една от тях да бъде използвана от друга форма или място във вашия код. Никога не свързвайте методите на класа към конкретни глобални променливи. Въпросът, който свързах като дубликат, има много по-добро решение на проблема от този.
- person Ken White; 08.05.2014
Разбира се, но въпросът беше на много основно ниво, така че отговорът също е основно решение. Работя по големи проекти, така че знам, че такова решение не може да се използва в такъв случай.
- person SyWo; 08.05.2014
Съжалявам, но лошото решение не е отговор само защото е лесният начин. Този отговор е просто грешен. Единствената причина все още да не съм гласувал против него е, че сте нов тук и се опитвах да бъда мил. :-)
- person Ken White; 08.05.2014
Разбирам те на сто процента! Не знам дали това е добро място за обсъждане. Разбира се, на тази тема вероятно може да се напише книга. Не смятате ли, че е глупаво първо да разберете програмирането на прости примери? Във всеки случай благодаря за съвета. Вярно е, че съм нов в stackoverflow. Но програмирам в Delphi и не само Delphi от 18 години :-).
- person SyWo; 08.05.2014