无法在已发布的组件 属性 中设置枚举类型

Cannot set enum type in published property of a component

我正在写一个组件,这是主要的 class 最重要的代码片段:

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 Error] Unit1.pas(29): E2003 Undeclared identifier: 'TSolverType'

我的问题很简单:为什么?

在我所在的单元中 运行 测试(简单的 VCL 形式)有包含其用途的组件,因此我能够 "see" TEquationSolver。正如您在 TEquationSolver 单元的顶部所看到的,我已经包含了 Equation 并且后者具有 TSolverType。

情况如下:

我是否必须在 uses 下的某处添加一些内容?我不想向单元 1 的 uses 添加内容。

如果您想让 TSolverType 对一个单元(例如表单)可见,您必须告诉该单元在哪里定义了 TSolverType。这是 Delphi 工作原理的一部分。

因此,您必须:

  • 在您要我们定义的单位的 uses 子句中包含 Equation(例如表格的单位)

  • 在组件的单​​位中包含 TSolverType

  • 隐藏 属性(例如,将其设为 privateprotected)。

Delphi 不支持您希望的隐含定义。