无法在已发布的组件 属性 中设置枚举类型
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
隐藏 属性(例如,将其设为 private
或 protected
)。
Delphi 不支持您希望的隐含定义。
我正在写一个组件,这是主要的 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
隐藏 属性(例如,将其设为
private
或protected
)。
Delphi 不支持您希望的隐含定义。