我想知道为什么Delphi(2007)提供了三个似乎做同样事情的窗口部件,以及每个部件的优缺点是什么。
在同一话题上,如果我想显示不同的控件集,为什么应该选择例如PageControl + TabSheets + Frames,而不是直接在父窗体上显示不同的框架?
谢谢。
来自TTabSet帮助文件:
选项卡集控件通常用于在对话框中显示选项卡页面。TTabSet提供向后兼容性。在32位Windows应用程序中使用TTabControl组件。
那么真正的问题是,TTabControl和TPageControl有什么区别?它们之间的区别在于TTabControl只有一个“页面”,而TPageControl每个选项卡都有一个页面。这使它们在不同的情况下非常有用。
TPageControl适用于想要在屏幕上放置更多UI而又没有足够空间的对话框。将您的UI组织成类别,并将每个类别放在一个页面上。例如,在“选项”对话框中经常看到这种模式。
另一方面,TTabControl适用于处理对象数组/列表。创建一个UI以显示和编辑单个对象的属性,并将其放置在TTabControl上,然后为每个对象创建一个选项卡,并设置事件处理程序,以便在更改选项卡时将新对象从数组加载到控件中。
至于框架问题,与框架结合使用TPageControl的主要原因是它提供了一种预构建的方式来决定要显示哪个框架。这样,您就不必重新发明一种机制。
type
IFormInterface = interface
[guid]
procedure FormProc;
end;
IFrameInterface = interface
[guid]
procedure SetFormController(Intf:IFormInterface);
end;
var
FrameIntf : IFrameInterface;
begin
if Supports(FrameObj,IFrameINterface,FrameIntf) then
FrameIntf.SetFormController(Self);
end;
procedure TFrame1.SetFormController(Intf:IFormInterface);
begin
fFormController := Intf;
end;
Procedure TFrame1.Destroy; override;
begin
fFormController := nil; // release the reference
inherited;
end;
Procedure TFrame1.Button1Click(Sender:tObject);
begin
if fFormController <> nil then
fFormController.FormProc
else
Raise Exception.Create('Form controller not set');
end;