Delphi:如何从另一个父类访问父类中的变量?

Delphi:如何从另一个父类访问父类中的变量?,delphi,scope,Delphi,Scope,如何访问“Flist”变量? 谢谢 德尔福2010,印地10,Win7 是的,这让我自由了: 你的文章没有太多的上下文来解释代码部分;请更清楚地解释您的场景。您需要解决变量Form1 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdTCPClient; type TForm1 = class(TForm

如何访问“Flist”变量? 谢谢

德尔福2010,印地10,Win7

是的,这让我自由了:
你的文章没有太多的上下文来解释代码部分;请更清楚地解释您的场景。

您需要解决变量Form1

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPClient;

type
  TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
  public
    Flist : TList;
    property list : TList read Flist write Flist;
  end;

  Tmy_class = class(TThread)
    public
    procedure test;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Tmy_class.test;
begin
  // Error here, can't access the Flist var or list propertie, help !! How to access?
  TForm1(TList).list.Clear;

  // Error
  Form1.list.Clear;

  // Error
  Form1.Flist.clear;

  // HOW ????????
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Flist := FList.Create;
end;

end.
但从线程执行此操作并不安全

更新:编译很好

Form1.list.clear;
但正如我之前警告过的,直接从线程使用列表不是一个好主意

另请参见如何创建列表的注释


是的,TMyClass必须在某个地方正确启动。

您需要使用getter和setter。如果是java。但事实并非如此。我相信你的语言也有类似的功能。你发布的代码都没有任何意义。您尚未创建
x
的实例,因此当然无法从
y.test
访问它。此外,您还有无法编译的代码—带有
x(TList).F1的行。Clear
甚至无法通过编译器,更不用说以任何方式进行工作了。请编辑您的帖子并添加真实的、可编译的代码,以演示您试图解决的问题。如果不是的话,我将投票以“不是一个真正的问题”来结束它。@DMPynes@waza-你已经得到了帮助。阅读肯的评论。如果您有一个“x”的实例,可以调用someX.fl.Clear。@Sertac Akyuz我编辑了主代码,您可以演示示例吗?我不想使用“var Form1:TForm1;”,但我认为别无选择。为什么从线程全局TList使用不是一个好主意?您不应该直接从线程访问任何VCL类,因为它们不是线程安全的。有很多方法可以通过关键部分来保护列表。或者使用线程安全列表。
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,     Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
 private
    { Private declarations }
    FList : TList;
  public
    { Public declarations }
    property List : TList read FList;
  end;

Type TMyClass = class(TThread)
  Public
    PROCEDURE Test;
end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FList:= TList.Create;  // Look here how to create the list
end;

{ TMyClass }

procedure TMyClass.Test;
begin
  Form1.List.Clear;
end;

end.