在Delphi 2010中......我有一个表格.表单的左侧是Treeview.它显示了一个多级层次结构.假设有5种不同类型的数据,类型A,B,C,D和E.在表单的右侧,我有一个面板,我将在其中创建一个TFrame.如果我在我的Treeview中单击"A"类型的数据元素,我会在表单的右侧创建一个显示tFrame"A"的TFrame.基本上我正在显示我的TreeView的各种层次结构的详细信息.5种类型的数据中的每一种都使用不同类型的TFrame.虽然我可以动态创建TFrames,但我很难知道WHERE以及如何删除/释放TFrames?
我是否创建了一个显示前一个TFrame的TYPE的变量?删除TFrame的正确方法是什么?是TFrame.Free吗?请记住,我可能需要创建框架A,自由框架A,创建框架B,自由框架B,创建框架A(再次)等等...
我试过了......
if Assigned (TFrameA), then TFrameA.free;
Run Code Online (Sandbox Code Playgroud)
虽然这似乎有效,但这会导致奇怪的行为(导致按钮消失).这也意味着我需要将所有5种类型的TFrame定义为全局变量.
任何和所有的想法都赞赏.
谢谢,
GS
保留一个TFrame变量,以便您知道当前显示的帧是什么.当您显示不同的帧时,您可以先释放/缓存当前帧.
如果要缓存帧,则保留五个单独的TFrame变量,每个页面类型一个.当您需要显示页面时,只有在您尚未创建页面时才创建它:
private
CurrentFrame: TFrame;
Frames: array[0..4] of TFrame;
Run Code Online (Sandbox Code Playgroud)
procedure TMyForm.TreeView1Change(Sender: TObject);
begin
if CurrentFrame <> nil then
begin
CurrentFrame.Parent := nil;
CurrentFrame := nil;
end;
if Frames[OneOfTheIndexes] = nil then
Frames[OneOfTheIndexes] := TAppropriateFrameType.Create(Self);
Frames[OneOfTheIndexes].Parent := Panel1;
CurrentFrame := Frames[OneOfTheIndexes];
end;
Run Code Online (Sandbox Code Playgroud)
如果你想重新创建帧,那么只需删除数组和Free()当前帧,然后再显示一个:
private
CurrentFrame: TFrame;
Run Code Online (Sandbox Code Playgroud)
procedure TMyForm.TreeView1Change(Sender: TObject);
begin
if CurrentFrame <> nil then
FreeAndNil(CurrentFrame);
CurrentFrame := TAppropriateFrameType.Create(Self);
CurrentFrame.Parent := Panel1;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |