2012-04-10 2 views
0

다른 비슷한 질문이있어서 사과드립니다.하지만 제가 가지고있는 문제에 대한 간단한 해결책을 찾고 싶습니다.Lazarus form2에서 추가 할 수있는 form1의 목록보기

form2에 추가 할 수있는 form1의 목록 뷰가 있습니다. Form2는 button1에 의해 form1에 의해 생성됩니다. Form2에는 listview가 있으며 form2의 버튼을 클릭하면 form1의 listview에 모든 항목을 추가하고 form2를 닫을 수 있습니다. 가장 간단한 방법은 무엇입니까?

* Windows 메시징을 사용해 보았지만 어떤 이유로 Lazarus가 TWM_CopyData와 작동하지 않습니다.

+0

정확한 중복 비 모드 양식] (http://stackoverflow.com/questions/10095001/pascal-passing-a-listview-from-mainform-to-a-nonmodal-form). – TLama

답변

4

내가 참조하는 장치를 선호하기 때문에 여기에 도움이 될 것입니다. Form2에는 Form2이 표시되기 전에 Form1에서 목록보기가 할당 된 public 속성 TargetListView이 선언됩니다. 이제 범위 Form2에서 Form1 목록보기에 액세스 할 수 있으며 항목을 닫으면 해당 항목을 복사 할 수 있습니다. 여기

은 제 1 유닛에 대한 단순화 된 코드이다 :

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; 
[파스칼로 mainform에서리스트 뷰를 전달
+0

이제 코드를보고 ['here'] (http://stackoverflow.com/a/10095057/960757); 그들은 거의 동일합니다. 'SetListView' setter 함수를 가진 private 필드'FListView' 대신에'PublicList' 만 사용했습니다. 그러나 생각은 같습니다. 그리고이 모든 것이 Delphi에도 적용될 수 있습니다. – TLama

+0

그의 게시물에서 David의 메모에 대해 설명하는 것을 잊어 버렸습니다.이 코드에도 적용되는 기본 양식 *에 대한 의존성이 있음을 의미합니다. 즉, 'Form1' (내 경우)의 목록보기를 제거한 다음'Form2 '의 단추를 클릭하면 항목을 복사하려고 시도한 목록보기에서 액세스 위반 오류가 발생합니다. 더 이상 존재하지 않습니다. 하지만 네가 그렇게하지 않을 것 같아. 그렇다면 의견을 남기거나 질문을 업데이트하십시오. – TLama

+0

매력처럼 일했습니다, 대단히 감사합니다! – wentimo

관련 문제