公共过程在Delphi XE8中不可见

时间:2016-01-11 09:56:40

标签: forms delphi delphi-xe8

我有一个用于登录我的应用程序的辅助表单,我有一个程序AddLine

type
  TFormLog = class(TForm)
    Memo1: TMemo;
  private
    procedure AddLine(aString: String);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormLog: TFormLog;

implementation

{$R *.dfm}

{ TFormLog }

procedure TFormLog.AddLine(aString: String);
begin
  Memo1.Lines.Add(aString);
end;

当我使用自动完成时(Ctrl-Shift_C)Delphi将AddLine过程添加到private部分,所以当我尝试

时,显然该过程对主窗体是不可见的
FormLog.AddLine('some text');

将声明移至公共区域并没有帮助:

type
  TFormLog = class(TForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AddLine(aString: String);
  end;

我仍然遇到编译错误,AddLine过程未解析。我确实将日志单元添加到uses子句中,因此Formlog在主窗体中是已知的 尝试直接访问TMemo具有相同的效果。

如何修复我的代码,以便我可以从主窗体中将文本添加到日志表单中?

2 个答案:

答案 0 :(得分:1)

公共成员可以从其他单位的代码中看到。您错误的可能解释包括:

  1. 该方法不公开。
  2. 您的实例变量不属于您认为的类型。
  3. 您没有编译您认为正在编译的代码,或者链接器正在查找您不打算查找的代码。
  4. 你也说:

      

    尝试直接访问TMemo具有相同的效果。

    同样,由于已发布可见性,因此可从单元外部看到。显然,类似于上面第2或第3项的内容正在发生。

    底线是可以从任何代码中看到公共(和已发布)成员。问题在于您的代码(只有您可以看到),您应该尝试通过询问代码的问题来解决这个问题,而不是担心编译器有缺陷。

    在更广泛的层面上,问题中提供的代码将方法声明为private。很明显,该单位外部无法看到该成员。作为一般规则,您应该提供您要求帮助的代码。

    此外,如果您询问编译器错误,请逐字报告错误。描述您对错误的理解是混淆的丰富来源。人们误解编译器错误是很常见的。如果他们描述了他们的误解,那么沟通就会破裂。逐字报告编译器错误,然后误解的范围为零。

答案 1 :(得分:-1)

我认为AddLine在VCL Delphi的某些地方是私有的。

因此尝试更改过程/方法名称 例如,一个名称完全不同,因为你的名字hehehe,并看到错误发生测试访问变量或对象到proc /方法

或为测试创建一个新项目

注意:如果ADDLINE是MEMO的一种方法,那么编译器无法解析将要执行的调用(我相信就是这样)