2011-12-06 55 views
0
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. 

如何訪問「Flist」變量? 謝謝。Delphi:如何從另一個父類訪問Parent類中的變量?

德爾福2010年,印第安納波利斯10,Win7的

葉氏,多數民衆贊成freeking我出去: 您的文章沒有什麼太大的上下文解釋代碼段;請更清楚地解釋你的情況。

+3

您發佈的任何代碼都沒有任何意義。你還沒有創建'x'的實例,所以你當然不能從'y.test'訪問它。另外,你的代碼不會編譯 - 帶有'x(TList).F1.Clear'的行甚至不會通過編譯器,更不用說任何方式的工作。請編輯您的帖子並添加**真實的**,可編譯的代碼來演示您正在嘗試解決的問題。如果不是,我投票結束它作爲「不是真正的問題」。 –

+0

你需要使用getters和setter。如果它是java。這不是。我敢肯定,你的語言有類似的做法。 – 09182746

+0

@DMPynes http://stackoverflow.com/questions/3963874/usage-of-property-vs-getters-setters-in-business-classes – waza123

回答

1

您需要解決變量Form1。

Form1.list.clear; 

但是,從一個線程這樣做是不安全的。

更新:編譯好。

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. 

但正如我之前提醒的那樣,直接從線程使用List不是一個好主意。

請參閱評論如何創建您的列表。

是的,TMyClass必須在某個地方正確啓動。

+0

我不想使用'var Form1:TForm1;',但認爲沒有選擇。爲什麼從線程全局TList中使用它不是一個好主意? – waza123

+0

你不應該直接從線程訪問任何VCL類,因爲它們不是線程安全的。有許多方法可以通過關鍵部分來保護列表。或者使用線程安全列表。 –

相關問題