Примечание. Вопрос изначально был помечен как 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