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

时间:2018-02-09 15:27:08

标签: delphi delphi-10.2-tokyo

我正在编写一个组件,这是包含最重要代码段的主类:

uses
  Equation;

type
 TEquationSolver = class(TComponent)
   private
     FSolver: TSolverType;
   published
     property RootFindAlgorithm: TSolverType read FSolver write FSolver;
 end;

在使用条款中,我添加了Equation,因为在Equation.pas内我声明了这种枚举:

type
 TSolverType = (TNewtonRaphson = 0, TSecant, TBisection, TBrent);

通过这种方式,我可以在IDE中使用下拉菜单在Object Inspector中选择一个选项。

我已经安装了组件,在测试时我发现了这个问题:

procedure TForm1.Button1Click(Sender: TObject);
begin
   EquationSolver1.RootFindAlgorithm := TSolverType.Secant;
end;

错误如下:

  

[dcc32错误] Unit1.pas(29):E2003未声明的标识符:   'TSolverType'

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

在我运行测试的单元(简单的VCL表单)中,包含其用途的组件,因此我能够“看到”TEquationSolver。正如你可以在TEquationSolver单元的顶部看到的那样,我已经包含了Equation而后者有了TSolverType。

情况如下:

enter image description here

我是否必须在某处uses下添加一些内容?我不想将内容添加到Unit1的uses

1 个答案:

答案 0 :(得分:4)

如果您想让TSolverType对单位(例如表格)可见,您必须告诉该单位TSolverType的定义。这是Delphi如何运作的一部分。

因此,您必须:

  • 在您希望我们定义的单位的Equation条款中包含uses(例如表格的单位)

  • 在您的组件的单元中包含TSolverType

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

Delphi不支持您希望的暗示定义。