0

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

我在 form1 中有一个列表视图,我希望 form2 能够添加到该列表视图中。Form2 由 form1 通过按下按钮创建。Form2 有一个列表视图,当我单击 form2 中的按钮时,我希望它将所有项目添加到 form1 中的列表视图并关闭 form2。完成此任务的最简单方法是什么?

*我尝试使用 Windows 消息传递,但由于某种原因 Lazarus 不适用于 TWM_CopyData。

4

1 回答 1

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; 
于 2012-04-11T00:35:16.460 回答