我正在编写一个组件,这是具有最重要代码段的主类:
uses
Equation;
type
TEquationSolver = class(TComponent)
private
FSolver: TSolverType;
published
property RootFindAlgorithm: TSolverType read FSolver write FSolver;
end;
在uses子句中,我添加了
Equation
,因为在Equation.pas
中我声明了这种枚举:type
TSolverType = (TNewtonRaphson = 0, TSecant, TBisection, TBrent);
这样,我可以在IDE中的“对象检查器”中使用带下拉菜单的选项。
我已经安装了该组件,并且在测试时发现了以下问题:
procedure TForm1.Button1Click(Sender: TObject);
begin
EquationSolver1.RootFindAlgorithm := TSolverType.Secant;
end;
错误如下:
[dcc32错误] Unit1.pas(29):E2003未声明的标识符:
'TSolverType'
我的问题很简单:为什么?
在运行测试的单元(简单的VCL表单)中,包含该组件的用途,因此我可以“看到”
TEquationSolver
。如您所见,在TEquationSolver单元内部的顶部,我包括了Equation
,后者具有TSolverType。情况如下:
我是否必须在
uses
下添加一些内容?我不想在Unit1的uses
中添加内容。 最佳答案
如果要使TSolverType
对某个单元(例如,窗体)可见,则必须告诉该单元定义了TSolverType
的位置。这就是Delphi工作方式的一部分。
因此,您必须:
在要向我们提供定义的单位的Equation
子句中包含uses
(例如,表单的单位)
在组件的单位中包含TSolverType
隐藏属性(例如通过将其设置为private
或protected
)。
Delphi不以您希望的方式支持隐式定义。
关于delphi - 无法在组件的已发布属性中设置枚举类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48709056/