gpt4 book ai didi

delphi - Delphi中框架之间的通信

转载 作者:行者123 更新时间:2023-12-02 10:43:54 27 4
gpt4 key购买 nike

我刚刚开始在 Delphi 中使用框架。

框架位于 FrameBar1 中,并且它们都是可见的。仅用于测试,第一个框架包含一个按钮,第二个框架包含一个编辑。

我想通过单击“按钮”(两个不同框架上的控件)来更改“编辑”中的文本。

框架之间如何通信

最佳答案

如果控件位于同一个窗体中,则采用相同的方式。只需在 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;

关于delphi - Delphi中框架之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com