当前位置:  开发笔记 > 数据库 > 正文

Delphi - 从表单访问Frame对象

如何解决《Delphi-从表单访问Frame对象》经验,为你挑选了1个好方法。

我需要运行一个附加到按钮(例如SQLBtn)的动作,该动作放在我的应用程序中的Frame1上,来自Form1.
我已经在Form1中使用了框架,但似乎无法以任何方式解决.
我已经尝试过Frame1.SQLbtn TFrame1.SQLbtn TFrameSQLBtn等但无法实现它.
我想得到类似于'SQLbtn.click'的东西来运行它背后的事件.

有没有人有任何想法如何解决它?



1> Werner Lehma..:

我不确定我是否理解你的问题.听起来你有一个带按钮的框架(按钮上有一个TAction或click事件处理程序),这个框架就坐在一个表格上.现在,您希望以编程方式模拟该按钮上的单击.

显然,您需要将框架单元添加到窗体的uses子句中.您还需要表单上的框架实例,该实例应该导致框架类型的表单字段,例如

TForm1...
  ...
  Frame1: TFrame1;
end;

然后,您可以通过Frame1.SQLbtn.Click任何表单的方法执行该代码.更好的方法可能是在框架上提供可以从表单中使用的公共方法.然后你不需要直接访问按钮(按钮是框架的实现细节,框架私有可以这么说).

澄清后编辑

我知道你有以下场景:

TFrameForm1...
  ...
  Frame1: TFrame1;
end;

TForm1...
  ...
  procedure something;
end;

procedure TForm1.something;
begin
  // how to call a method on Frame1 which is on FrameForm1
end;

您最好的选择是将代码从框架按钮OnClick事件处理程序移动到一个单独的单元中.这可以是数据模块,也可以是具有独立过程的另一个单元.然后,您可以从Form1和Frame1按钮事件处理程序中调用该代码.这是Vegar评论的内容.

如果这是不可能的,例如因为处理需要访问Frame1上的其他控件,请将代码移动到Frame1上的新过程(我的原始建议):

TFrame1...
  ...
public
  procedure framestuff;
end;

procedure TFrame1.framestuff;
begin
  ...
end;

procedure TFrame1.SQLbtnClick(Sender...);
begin
  framestuff;
end;

现在,您需要从Form1调用该方法.你需要一个对FrameForm1的引用.在创建TFrameForm1时需要手动初始化(!).在此示例中,引用是字段FFrameForm:

TForm1...
  ...
  FFrameForm: TFrameForm1;
  procedure something;      
end;

procedure TForm1.something;
begin
  FrameForm.framestuff;
end;

或者,默认情况下,Delphi将所有表单的全局变量添加到表单单元(自动表单创建,检查项目选项/表单).然后你这样做:

procedure TForm1.something;
begin
  FrameForm1.framestuff; // if FrameForm1 is the name Delphi used for the global variable
end;

当然还有很多其他的变化......

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有