Забележка: Въпросът първоначално беше маркиран с Delphi. Не познавам FPC/Lazarus, така че някои от подробностите може да не са точни по-долу, но концепциите все още са валидни.
Предполагам, че имате глобална променлива, представляваща основната форма, наречена MainForm
в името на аргумента. Най-бързият и прост подход е просто да използвате MainForm.ListView
, за да позволите на другия ви формуляр да препраща към списъчния изглед на основния формуляр.
Не съм много запален по този подход, тъй като това означава, че другата форма зависи от изпълнението на основната форма.
Като алтернатива можете да прехвърлите препратка към изгледа на списък към другия формуляр. Например можете да добавите SetListView
процедура към другата си форма:
type
TMyOtherForm = class(TForm)
private
FListView: TListView;
public
procedure SetListView(Value: TListView);
end;
.....
procedure TMyOtherForm.SetListView(Value: TListView);
begin
FListView := Value;
end;
След това в главната форма, вероятно в манипулатора на събития OnCreate
за главната форма, можете да извикате този метод:
procedure TMainForm.FormCreate(Sender: TObject);
begin
MyOtherForm.SetListView(ListView);
end;
Това всъщност не е много по-добро от първото предложение. Другата форма все още зависи от изпълнението на основната форма, макар и може би по-малко значима зависимост.
Ако искате да запазите двата формуляра дори по-малко свързани, тогава основният формуляр може да изложи метод, който приема допълнения към списъка:
procedure TMainForm.AddToList(const Name: sting; const Time: TDateTime);
var
Item: TListItem;
begin
Item := ListView.Items.Add;
Item.Caption := Name;
Item.SubItems.Add(DateTimeToStr(Time));
end;
В другата си единица за формуляри добавяте основната единица за формуляр към клаузата за използване в раздела за изпълнение. Това ви позволява достъп до глобалната променлива MainForm
и можете да извикате
MainForm.AddToList(Name, Time);
Този подход е най-добрият според мен, защото позволява на основната форма да запази внедряването на списъка лично за себе си.
Заявявате в коментар, че искате да избегнете всякакви кръгови препратки поради клаузи uses
. Това е лесно за уреждане, тъй като нито едно от горните не изисква модификации на клаузата uses
от раздела за интерфейс от двете въпросни единици.
person
David Heffernan
schedule
10.04.2012