我需要运行一个附加到按钮(例如SQLBtn)的动作,该动作放在我的应用程序中的Frame1上,来自Form1.
我已经在Form1中使用了框架,但似乎无法以任何方式解决.
我已经尝试过Frame1.SQLbtn TFrame1.SQLbtn TFrameSQLBtn等但无法实现它.
我想得到类似于'SQLbtn.click'的东西来运行它背后的事件.
有没有人有任何想法如何解决它?
我不确定我是否理解你的问题.听起来你有一个带按钮的框架(按钮上有一个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;
当然还有很多其他的变化......