【发布时间】:2016-10-24 03:39:50
【问题描述】:
我又来这里是为了一个关于通知的问题。 我有followinf接口:
unit TblInterface;
interface
uses
System.TypInfo, Vcl.Forms, RzPanel, Winapi.Windows, Winapi.Messages,
UserMessages, Vcl.Dialogs, Vcl.Controls;
type
TFrameType = (ftList, ftDetail);
TFrameInfo = record
Frame: TFrame;
FrameType: TFrameType;
end;
TFrameClass = class of TFrame;
ITabella = interface
['{D21924F9-BB41-493B-B06D-0908C0CA73D8}']
function GetCurrentActiveFrameType: TFrameInfo;
procedure CreateLstFrame(ParentForm: TForm; Frame: TFrameClass);
procedure CreateDtlFrame(ParentForm: TForm; Frame: TFrameClass);
procedure DestroyLstFrame;
procedure DestroyDtlFrame;
procedure BringFrameToFront(FrameType: TFrameType);
procedure OnDoubleClick;
end;
TTabella = class(TInterfacedObject, ITabella)
private
FLst: TFrame;
FDtl: TFrame;
ActFrame: TFrameInfo;
function GetCurrentActiveFrameType: TFrameInfo;
procedure CreateLstFrame(ParentForm: TForm; Frame: TFrameClass);
procedure CreateDtlFrame(ParentForm: TForm; Frame: TFrameClass);
procedure DestroyLstFrame;
procedure DestroyDtlFrame;
procedure BringFrameToFront(FrameType: TFrameType);
procedure OnDoubleClick;
end;
implementation
{ TTabella }
{ Creazione frame lista }
procedure TTabella.CreateLstFrame(ParentForm: TForm; Frame: TFrameClass);
begin
FLst := Frame.Create(ParentForm);
FLst.Parent := ParentForm;
FLst.Align := alClient;
end;
{ Creazione frame dettaglio }
procedure TTabella.CreateDtlFrame(ParentForm: TForm; Frame: TFrameClass);
begin
FDtl := Frame.Create(ParentForm);
FDtl.Parent := ParentForm;
FDtl.Align := alClient;
end;
{ Distruzione frame lista }
procedure TTabella.DestroyLstFrame;
begin
FLst.Free;
end;
{ Distruzione frame dettaglio }
procedure TTabella.DestroyDtlFrame;
begin
FDtl.Free;
end;
{ Porta in primo piano il frame richiesto }
procedure TTabella.BringFrameToFront(FrameType: TFrameType);
begin
case FrameType of
ftList: begin
FLst.BringToFront;
ActFrame.Frame := FLst;
end;
ftDetail: begin
FDtl.BringToFront;
ActFrame.Frame := FDtl;
end;
end;
ActFrame.FrameType := FrameType;
end;
{ Restiruisce il frame attivo }
function TTabella.GetCurrentActiveFrameType: TFrameInfo;
begin
Result := ActFrame;
end;
procedure TTabella.OnDoubleClick;
begin
BringFrameToFront(ftList);
end;
end.
在界面中,我创建了两个框架,用于显示一些数据库表的列表和详细信息。 我创建的表单界面,在正确的框架前面并销毁它。 此时我需要将事件通知给创建的框架,但我不知道如何完成这项工作。 例如,我需要通知详细框架在列表框架中按下了一个按钮。
我怎样才能完成这项任务?
【问题讨论】:
-
您编写“我创建的表单界面,将其放在正确的框架前面并销毁它”。你什么时候毁掉它?在 OnDoubleClick 中?从您的代码中不清楚。框架是否超出您的控制?你管理他们吗?如果是这样,您可以子类化一个 TFrame 并添加一个由 ListFrame 调用的方法
-
我有两个用于任何表格的框架:一个用于列表记录,一个用于显示记录详细信息。它们是在用户选择要管理的表时动态创建的,所以我不知道框架中包含什么。当用户关闭承载框架的表单时使用 Destory
-
如果我理解正确,用户选择一个表,并获取列表框架,然后他或她在列表框架中选择一条记录并在详细信息框架中查看详细信息,对吗?跨度>
-
是的,约翰,你是对的!