0

別の同様の質問をして申し訳ありませんが、私が抱えている問題に対するより簡単な解決策を見つけたいと思っていました.

form2に追加できるようにしたいform1にリストビューがあります。Form2 は、ボタンを押すことで form1 によって作成されます。Form2 にはリストビューがあり、form2 のボタンをクリックすると、すべてのアイテムが form1 のリストビューに追加され、form2 が閉じます。これを達成する最も簡単な方法は何ですか?

*Windows メッセージングを使用してみましたが、何らかの理由で Lazarus が TWM_CopyData で動作しません。

4

1 に答える 1

4

私は単位参照を好むので、ここにあなたを助けるかもしれないものがあります. が表示される前のリスト ビューが割り当てられているForm2パブリック プロパティが宣言されています。これで、スコープからリスト ビューにアクセスできるようになり、閉じる前にそこに項目をコピーできます。TargetListViewForm1Form2Form1Form2

最初のユニットの簡略化されたコードは次のとおりです。

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;

2 番目のユニットの簡略化されたコードは次のとおりです。

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 に答える