使用框架(Delphi)

时间:2016-08-09 23:32:36

标签: delphi frames

我刚开始在Delphi中使用Frames。

那些帧在FrameBar1中,它们都是可见的。仅用于测试,第一个包含一个Button,第二个包含一个Edit。

我想在编辑中更改文本,点击按钮(两个不同的框架上的控件)。

如何在框架之间 沟通

1 个答案:

答案 0 :(得分:11)

与控件在同一表单中的方式相同。只需在Edit控件前面加上拥有它的Frame对象,例如:

uses
  Frame1Unit, Frame2Unit;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Frame1 := TFrame1.Create(Self);
  Frame1.Parent := ...;
  ...
  Frame2 := TFrame2.Create(Self);
  Frame2.Parent := ...;
  ...
end;

uses
  Frame2Unit;

procedure TFrame1.Button1Click(Sender: TObject);
begin
  Frame2.Edit1.Text := '...';
end;

更好的设计是封装逻辑,因此Frame1和Frame2彼此不了解。让Frame1公开单击按钮时触发的事件,然后父Form可以为该事件分配处理程序并在Frame2上分配文本,例如:

uses
  Frame1Unit, Frame2Unit;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Frame1 := TFrame1.Create(Self);
  Frame1.Parent := ...;
  Frame1.OnNewText := Frame1Text;
  ...
  Frame2 := TFrame2.Create(Self);
  Frame2.Parent := ...;
  ...
end;

procedure TForm1.Frame1Text(Sender: TObject; const NewText: string);
begin
  Frame2.EditText := NewText;
end;

type
  TFrame1TextEvent = procedure(Sender: TObject; const NewText; string) of object;

  TFrame1 = class(TFrame)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  public
    OnNewText: TFrame1TextEvent;
  end;

procedure TFrame1.Button1Click(Sender: TObject);
begin
  if Assigned(OnNewText) then
    OnNewText(Self, '...');
end;

type
  TFrame2 = class(TFrame)
    Edit1: TEdit;
  private
    function GetEditText: string;
    procedure SetEditText(const Value: string);
  public
    property EditText: string read GetEditText write SetEditText;
  end;

function TFrame2.GetEditText: string;
begin
  Result := Edit1.Text;
end;

procedure TFrame2.SetEditText(const Value: string);
begin
  Edit1.Text := Value;
end;