掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストを保持するクラスをリスト化するには? (ID:12774)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
。さん、ご返答ありがとうございます。 例文で上げたソースですが、 >あなた、iとj代入間違ってますよ。 >MyList3.Items[j] → MyList3.Items[i] この文は、実際には正しく書けております。 ちなみにCreateやらFreeなども書いてませんでしたがやっております。 紛らわしい書き方やミスをして申し訳ございませんでした。 。さんの返事を受けまして、上記のプログラムを改変して動くようにしたものと、自己のプログラムとを追っていった結果、どうやらオブジェクトの開放部分で不具合が生じていたようです。 お手を煩わせてしまい申し訳ございませんでした。心からお礼を申し上げます。 ありがとうございました。 ----------------------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, StdCtrls; type PZahyo=^TZahyo; TZahyo=Record x,y:Integer; end; type TMyClass1 = class private MyList1:TList; public { Public 宣言 } constructor Create; destructor Destroy; override; end; type TMyClass2 = class private MyList3 : TList; //このリスト内にTMyClass1が入る function GetMyItem(Index: Integer): TMyClass1; public { Public 宣言 } property MyItems[Index: Integer]: TMyClass1 read GetMyItem; constructor Create; destructor Destroy; override; end; ////////////////////////// type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } MyList:TMyClass2; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} constructor TMyClass1.Create; begin inherited Create; MyList1 := TList.Create; end; destructor TMyClass1.Destroy; var i:Integer; begin for i := MyList1.Count-1 downto 0 do Dispose(PZahyo(MyList1[i])); MyList1.Free; inherited Destroy; end; //////////////////////// function TMyClass2.GetMyItem(Index: Integer): TMyClass1; begin Result:=TMyClass1(MyList3.Items[Index]) end; constructor TMyClass2.Create; begin inherited Create; MyList3 := TList.Create; end; destructor TMyClass2.Destroy; var i: integer; begin for i := MyList3.Count-1 downto 0 do TMyClass1(MyList3.Items[i]).Free; MyList3.Free; inherited Destroy; end; ////////////////////////// procedure TForm1.Button1Click(Sender: TObject); var i,j:Integer; temp:PZahyo; begin Memo1.Lines.Clear; for i:=0 to Mylist.MyList3.Count-1 do begin for j:=0 to TMyClass1(Mylist.MyList3.Items[i]).MyList1.Count-1 do begin temp:=TMyClass1(Mylist.MyList3.Items[i]).MyList1.Items[j]; Memo1.Lines.add(inttostr(i)+','+inttostr(j)+': (x,y) = ('+inttostr(temp.x)+','+inttostr(temp.y)+')'); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin MyList:=TMyClass2.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin Mylist.Free; end; procedure TForm1.Button2Click(Sender: TObject); var pNewSpot:PZahyo; i:Integer; temp1:TMyclass1; begin Randomize; temp1:=TMyClass1.Create; for i:=0 to 9 do begin new(pNewSpot); pNewSpot.x:=Trunc(Random(100)); pNewSpot.y:=Trunc(Random(100)); TMyclass1(temp1).MyList1.Add(pNewSpot); end; Mylist.MyList3.Add(temp1); end; end. ----------------------------------------------------------------------- ちなみに改変したものは以上のような形になりました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.