私はデータのトレネルリストを持っています。特定のレコードと一致するツリーリストをループして、一般的なTList <>に追加しています。これは、すべてのレコード値がTList内のすべての項目に追加された最後のレコード値になることを除いて機能します。このようなレコードタイプのレコードをTList <>に追加するにはどうすればよいですか?
tlCompanyList.GotoBOF;
for i := 0 to tlCompanyList.Count-1 do
begin
if colCompanyChecked.Value then
begin
inc(ItemsChecked);
CompData.CompanyName := colCompanyName.Value;
CompData.CompanyDataPath := colCompanyDataPath.Value;
CompData.CompanyPath := colCompanyPath.Value;
CompData.CompanyVer := colCompanyVersion.Value;
AList.Add(CompData);
end;
tlCompanyList.GotoNext;
...または追加したレコード:このような
type
TCompInfo = record
private
class var
FCompanyName : string;
FCompanyPath : string;
FCompanyDataPath: string;
FCompanyVer : string;
public
class procedure Clear; static;
class property CompanyName : string read FCompanyName write FCompanyName;
class property CompanyPath : string read FCompanyPath write FCompanyPath;
class property CompanyDataPath : string read FCompanyDataPath write FCompanyDataPath;
class property CompanyVer : string read FCompanyVer write FCompanyVer;
end;
TCompList = TList<TCompInfo>;
// variablies defined ...
var
CompData : TCompData;
AList : TCompList;
追加記録:まったく同じことで
tlCompanyList.GotoBOF;
for i := 0 to tlCompanyList.Count-1 do
begin
if colCompanyChecked.Value then
begin
inc(ItemsChecked);
AList.Count := ItemsChecked;
AList.Items[ItemsChecked-1].CompanyName := colCompanyName.Value;
AList.Items[ItemsChecked-1].CompanyDataPath := colCompanyDataPath.Value;
AList.Items[ItemsChecked-1].CompanyPath := colCompanyPath.Value;
AList.Items[ItemsChecked-1].CompanyVer := colCompanyVersion.Value;
end;
tlCompanyList.GotoNext;
結果
はここにいくつかのコードです。 AList.Items [0 ... Count-1]はすべて同じ値を持ちます。私は正しいデータがキャプチャされていることがわかりますが、AListに新しいレコードを保存すると、以前のすべてのレコードは同じ値になります。これは、TListの各項目がメモリ内の同じレコードへのポインタであることを示しています。レコードが変更されているメモリの場合、すべての項目が変更されます。これは私が望むものではありません。 TList内の新しいレコードを異なるデータを保持するためにどのように割り当てるのですか?
私は他の方法で最終結果を達成することができ、確かに私が持っていることを知っています。ジェネリックスとレコードを使用している私にとって、これはもっと教育的なものになっています。私はDelphi XEを使用しています。
ありがとうございます。
+1私は 'class var'を見つけませんでした!私の脳はそれを許さないと思う!答えを得るためによくできました。 –
ありがとう!それはそれをしました。 – jwilfong