Delphi无法从TEdit中获取文本。

7
我在写Delphi代码时遇到了一个问题。尽管声明并在之前的过程中使用了组件,但我无法访问它们(现在我正在尝试在函数中使用它们,也许这就是原因,我不知道,我不擅长Delphi)。我制作了一些屏幕截图以使其更清晰。请看第一张屏幕截图。我得到了编译器错误。它说该组件不存在,但是在第三个屏幕截图中,您可以看到该组件确实存在。在第二个屏幕截图上,我甚至可以使用此组件(可以成功调用代码完成),但如果我尝试在secondFunction的范围内调用它,则会出现错误,例如:“由于源代码中的错误而无法调用代码完成”-但是错误是什么?如果我注释掉与Edit7和Edit8有关的这两行,则可以无问题运行程序。我真的想不出错在哪里,如果你们中的任何人能给我一些建议,那将不胜感激。我不想在这里发布整个代码,因为它大约需要300行,但是如果您需要了解其他内容以解决此问题,请告诉我。我没有足够的声望点来发布超过2个超链接,所以您必须复制并粘贴最后一个链接:D

1
我给你+5声望来帮助你起步。你的问题非常清晰易懂,易于跟随。 - Andreas Rejbrand
说实话,使用80位扩展数据类型几乎没有什么好处,而且可能会带来很多问题。我建议使用Double类型代替。 - David Heffernan
1
请以后在问题中发布代码。从截图中阅读代码很痛苦。 - David Heffernan
@David:好的,但现在我们可以看到编译器停止的红线和编译器的错误信息。我不知道你用什么浏览器,但我通常会将(缩小的)图像拖到新标签页中,以查看其完整大小。 - Andreas Rejbrand
1个回答

6
问题在于Edit7TForm1类的一部分。在TForm1之外,无法通过名称访问Edit7。因此,您可以使用全局变量Form1并执行以下操作:
function secondFunction(x: extended): extended;
var
  paramA, paramB: extended;
begin
  paramA := StrToFloat(Form1.Edit7.Text);
  paramB := StrToFloat(Form1.Edit8.Text);

  Result := paramA + paramB * sin(x);
end;

或者你可以将secondFunction作为TForm1类的一部分:

function TForm1.secondFunction(x: extended): extended;
var
  paramA, paramB: extended;
begin
  paramA := StrToFloat(Edit7.Text);
  paramB := StrToFloat(Edit8.Text);

  Result := paramA + paramB * sin(x);
end;

但是你需要在 TForm1 类的声明中声明 secondFunction,像这样:

TForm1 = class(TForm)
private
  { Private declarations }
public
  { Public declarations }
  function secondFunction(x: extended): extended;
end;

在该单元的开头。


4
他可以将表单实例作为参数添加到函数中。+1 - Lieven Keersmaekers
2
@Lieven:好主意,但如果我是他(?),我也会将Edit7Edit8重命名为更相关的名称。 - Andriy M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接