来自form1的Lazarus Listview可以通过form2添加

时间:2012-04-10 21:41:56

标签: pascal lazarus

我为另一个类似的问题道歉,但我希望找到一个更简单的解决方案来解决我遇到的问题。

我在form1中有一个listview,我希望form2能够添加到。 Form2由按钮按下由form1创建。 Form2有一个列表视图,当我点击form2中的一个按钮时,我希望它将所有项目添加到form1中的listview并关闭form2。实现这一目标的最简单方法是什么?

*我尝试使用Windows消息,但由于某些原因,Lazarus无法使用TWM_CopyData。

1 个答案:

答案 0 :(得分:4)

由于我更喜欢​​单位引用,这里有什么可以帮到你。在Form2声明的公共属性TargetListView中,Form1在显示Form2之前为其分配了列表视图。现在,您可以从Form1范围访问Form2列表视图,并且可以在关闭之前复制项目。

以下是第一个单元的简化代码:

unit Unit1;

uses
  Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.TargetListView := ListView1;
  Form2.Show;
end;

以下是第二单元的简化代码:

unit Unit2;

type
  TForm2 = class(TForm)
    Button1: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    TargetListView: TListView;
  end;

procedure TForm2.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  TargetListView.Items.BeginUpdate;
  try
    for I := 0 to ListView1.Items.Count - 1 do
      TargetListView.Items.Add.Assign(ListView1.Items[I]);
  finally
    TargetListView.Items.EndUpdate;
  end;
  Close;
end;