我有两个VCL表单: Unit1 中的Form1和 Unit2中的Form2 。
我还在项目中添加了另一个单元, Unit3 。
在 Unit3 中,使用列表中添加了 Unit1 和 Unit2 。我设法创建了一个可以操纵其他单位的类(Unit1& Unit2):
unit Unit3;
interface
uses
Vcl.Forms, Unit1, Unit2;
type
Tmain = class
private
procedure openForm1;
procedure openForm2;
end;
var
Form1: TForm1;
Form2: TForm2;
implementation
procedure Tmain.openForm1;
begin
//I will create code to open Form1 soon
end;
procedure Tmain.openForm2;
begin
//I will create code to open Form2 soon
end;
end.
如何运行(或正确创建)共享代码单元以管理 Form1 & Form2 如果Project1的源代码似乎没有运行我的共享代码单元( Unit3 )?
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
我正在尝试这些算法以避免循环引用作为我的理解水平,通过Lieven Keersmaekers在How to manage circular references in delphi units?上的答案
答案 0 :(得分:1)
Delphi VCL应用程序中的一些基础知识。
顶部是Application: TApplication
对象,它是在程序初始化(.exe)期间很早创建的。
如您所见,它首先在您的程序文件中引用,在.dpr中:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Application对象不可见。因此,Delphi有一个 MainForm 的概念。主窗体旨在成为用户的主要UI,并由首次调用Application.CreateForm()创建。除非程序员阻止,否则主窗体是可见的,因此用户可以与应用程序进行交互。当主窗体关闭时,应用程序终止。广义地说,我们可以说主窗体控制应用程序的生命周期。
主窗体通常提供菜单或其他UI元素,用户可以激活和/或显示其他窗体并执行程序任务。
Delphi命名表单类型,如您所见,TForm1
,TForm2
...等,并为每个表单类型声明一个全局变量来保存表单的实例:Form1
,Form2
...等再次,使用这些标准名称Form1
是应用程序的主要形式,如果它是第一个创建的致电Application.CreateForm()
。
在你的情况下,设计三种形式是很自然的:
Unit3
并作为主要表单。二
按钮,每个按钮分别显示Form2和Form3。在这种情况下,您需要将Unit2
和Unit3
添加到uses
的{{1}}条款中:
Unit1
implementation
uses Unit2, Unit3;
上按钮的事件处理程序如下所示:
Form1