2010-01-26 3 views
2

2 가지 형태가 있습니다. 1 개의 패널과 2 개의 버튼 (pnl1, btnShowTree 및 btnAddItems)이있는 Form1. Treeview (tv1)를 포함하는 Form2도 있습니다.부모 양식 borderstyle 변경시 Treeview.Clear가 실패하는 이유는 무엇입니까?

아래의 짧은 코드는이 작은 데모를 이해 참조하십시오

내가 btnAddItems를 클릭하면 내가 3 개 항목 (A. B. C.)를 참조 것으로 예상
procedure TForm1.btnShowTreeClick(Sender: TObject); 
begin 
    with Form2 do 
    begin 
    tv1.Items.clear; 
    Tv1.Items.AddChild(nil, '1.'); 
    Tv1.Items.AddChild(nil, '2.'); 
    Tv1.Items.AddChild(nil, '3.'); 
    Form2.Parent:=pnl1; 
    Form2.BorderStyle:=bsNone; 
    Form2.show; 
    end; 
end; 

procedure TForm1.btnAddItemsClick(Sender: TObject); 
begin 
with Form2 do 
    begin 
    BorderStyle:=bsSizeable; // here it works wrong 
    tv1.Items.clear; 
    Tv1.Items.AddChild(nil, 'A.'); 
    Tv1.Items.AddChild(nil, 'B.'); 
    Tv1.Items.AddChild(nil, 'C.'); 
// BorderStyle:=bsSizeable; here it works fine. WHY ????? 
    Form2.Show; 
    end; 
end; 

procedure TForm2.btnCloseForm2Click(Sender: TObject); 
begin 
Parent:=nil; 
Hide;   
// when I exchange instructions order like: 
// Hide; 
// Parent:=nil; 
// I get the same problem with improperly nested BorderStyle:=bsSizeable; I have 
// only blur idea why it is so... 
end; 

. 이전 항목은 삭제되지 않기 때문에 6 항목이 표시됩니다 !!! 아무도 그것에 빛을 쏟을 수 없다. 왜냐하면 내가 프로그램 작업을 잘하기 위해 몇 시간 동안 여기에 갇혀 있기 때문이다.하지만 나는 아직도 내가 가장 잘못한 것을 가장 이상한 생각이 아니다 ...

+0

어떤 버전의 델파이입니까? 프로그램을 만들었고 광산이 잘 작동합니다 (양식에 A, B 및 C가 표시됨). –

+0

델파이 7을 사용하고 있습니다 – lyborko

답변

2

런타임에 BorderStyle을 변경하면 윈도우에 파괴되고 재창조된다. 이것은 VCL이 TTreeView와 같은 폼에있는 컨트롤의 내용을 저장하고, 폼을 파괴하고, 새로운 BorderStyle로 폼을 생성하고, 폼의 모든 컨트롤을 다시 생성 한 다음, 모든 내용을 복원해야한다는 것을 의미합니다.

아마도 메모리에서 저장된 내용을 제대로 제거하지 못하는 이전 버전의 델파이 (아래 참고 참조)를 사용하고있을 것입니다. @M Schenkel은 최신 버전을 사용하고 있습니다.

물론 해결책은 런타임에 BorderStyle의 변경을 중지하는 것입니다. 그러면 폼이 파괴되고 다시 만들어지지 않게됩니다. :-) 나는 델파이로 버전 1부터 시작하여 현재 델파이 2010을 통해 프로그래밍을 해왔고 그 모든 시간에 한번도 런타임에 BorderStyle을 변경할 필요가 없었습니다.

참고 : Delphi 질문을 게시 할 때 사용중인 Delphi 버전을 항상 표시해야합니다. 델파이 버전의 차이점은 VCL의 차이를 의미하며 문제는 다른 버전의 여러 가지 문제로 인해 발생할 수 있습니다. 사용중인 Delphi의 버전을 파악하면 문제를 해결하거나 질문에 쉽게 답할 수 있습니다.

+0

덕분에 ... 천천히 똑똑해졌습니다 .--) Delphi 7을 사용하고 있습니다. – lyborko

관련 문제