为主窗口建立两个Frame,两个Frame之间可以引用吗?

hncdllyz 2018-01-06 10:15:20
为主窗口建立两个Frame,两个Frame之间可以相互引用吗?
...全文
1079 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月路明 2018-01-12
  • 打赏
  • 举报
回复
引用 11 楼 hncdllyz 的回复:
[quote=引用 10 楼 yisuylm 的回复:] [quote=引用 9 楼 hncdllyz 的回复:] 按上面的代码,我的意思是Unit2、Unit3之间的访问。
难以理解你的意思,Unit2、Unit3之间的访问最终要落实到实例的访问,我上面的代码就是相互访问对方的实例,如果不访问实例,你想访问什么呢?你可以举个例子[/quote] 你的这句话“”Unit2、Unit3之间的访问最终要落实到实例的访问“”说到点子上了。 [/quote] 那不就结了, procedure TForm1.FormCreate(Sender: TObject); begin Frame21.Frame3:= Frame31; Frame31.Frame2:= Frame21; end; 这段代码就是相互引用对方的实例
hncdllyz 2018-01-11
  • 打赏
  • 举报
回复
引用 10 楼 yisuylm 的回复:
[quote=引用 9 楼 hncdllyz 的回复:] 按上面的代码,我的意思是Unit2、Unit3之间的访问。
难以理解你的意思,Unit2、Unit3之间的访问最终要落实到实例的访问,我上面的代码就是相互访问对方的实例,如果不访问实例,你想访问什么呢?你可以举个例子[/quote] 你的这句话“”Unit2、Unit3之间的访问最终要落实到实例的访问“”说到点子上了。
日月路明 2018-01-10
  • 打赏
  • 举报
回复
引用 9 楼 hncdllyz 的回复:
按上面的代码,我的意思是Unit2、Unit3之间的访问。
难以理解你的意思,Unit2、Unit3之间的访问最终要落实到实例的访问,我上面的代码就是相互访问对方的实例,如果不访问实例,你想访问什么呢?你可以举个例子
hncdllyz 2018-01-10
  • 打赏
  • 举报
回复
按上面的代码,我的意思是Unit2、Unit3之间的访问。
日月路明 2018-01-10
  • 打赏
  • 举报
回复
引用 5 楼 hncdllyz 的回复:
[quote=引用 4 楼 yisuylm 的回复:] 当然可以,但是根据你的描述,你可能是两个实例之间相互访问,这个只要引用对方的实例进行访问就可以了,没什么难度
如果如此简单我就不会在这里请教了。[/quote] 确实不复杂,如下面的代码所示,个自定义对方的变量,在访问的时候通过强制类型转换完成访问:
unit Unit2;

interface

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFrame2 = class(TFrame)
    Edit1: TEdit;
    Memo1: TMemo;
  private
    FFrame3: TFrame;
    procedure visiteForm3;
    { Private declarations }
  public
    property Frame3: TFrame read FFrame3 write FFrame3;
    { Public declarations }
  end;

implementation
uses Unit3;
{$R *.dfm}

procedure TFrame2.visiteForm3;
begin
  TFRame3(Frame3).CheckBox1.Checked:=true;
end;

end.
-------------另一个Frame
unit Unit3;

interface

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFrame3 = class(TFrame)
    CheckBox1: TCheckBox;
  private
    FFrame2: TFrame;
    { Private declarations }
  public
    procedure VisiteFrame2;
    property Frame2: TFrame read FFrame2 write FFrame2;
    { Public declarations }
    
  end;

implementation
uses Unit2;

{$R *.dfm}

procedure TFrame3.VisiteFrame2;
begin
  TFrame2(Frame2).Edit1.Text:='aaaaa';
end;

end.
------主单元的写法
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit3, Unit2;

type
  TForm1 = class(TForm)
    Frame21: TFrame2;
    Frame31: TFrame3;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Frame21.Frame3:= Frame31;
  Frame31.Frame2:= Frame21;
end;

end.

hncdllyz 2018-01-10
  • 打赏
  • 举报
回复
引用 6 楼 yunzm_wang 的回复:
Frame主要为了嵌套的,不能相互嵌套,但是实例可以相互访问
实际上,两个为主窗体建立分Frame,相互之间可以在uses 中引用,但相互访问好像不可以,是吗?
yunzm_wang 2018-01-09
  • 打赏
  • 举报
回复
Frame主要为了嵌套的,不能相互嵌套,但是实例可以相互访问
xiaocongzhi 2018-01-07
  • 打赏
  • 举报
回复
一个interface部分uses 一个implementation部分uses
lyhoo163 2018-01-07
  • 打赏
  • 举报
回复
Frame也是以单位为基础,两个Frame之间可以相互引用的,如同两个单元之间引用一样,就可以了。
hncdllyz 2018-01-07
  • 打赏
  • 举报
回复
引用 4 楼 yisuylm 的回复:
当然可以,但是根据你的描述,你可能是两个实例之间相互访问,这个只要引用对方的实例进行访问就可以了,没什么难度
如果如此简单我就不会在这里请教了。
日月路明 2018-01-07
  • 打赏
  • 举报
回复
当然可以,但是根据你的描述,你可能是两个实例之间相互访问,这个只要引用对方的实例进行访问就可以了,没什么难度
hncdllyz 2018-01-07
  • 打赏
  • 举报
回复
两位,好像不行,Frame不是窗口,又不是普通单元,好像永远属于主窗口。 拜托详细一点。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧