Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКласс с TList Найти похожие ветки
← →
Elast (2004-11-29 21:04) [0]Ошибка при записи в TList
TMyItem = class
fId : integer;
fName : string;
constructor Create( aId : integer; aName : string);
end;
TMyList = class
private
FMyList : TList;
function GetItem(Index: Integer): TMyItem;
procedure SetItem (Index: Integer; Item: TMyItem);
public
property Items[Index:integer] : TMyItem read GetItem write SetItem;
constructor Create;
destructor Destroy; override;
end;
PTMyItem = ^TMyItem;
....
constructor TMyItem.Create( aId : integer; aName : string);
begin
inherited Create;
fId := aId;
fName := aName;
end;
constructor TMyList.Create;
begin
inherited Create;
end;
function TMyList.GetItem(Index: Integer): TMyItem;
begin
Result := PTMyItem(FMyList.Items[index])^;
end;
procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
PTMyItem(FMyList.Items[index])^ := Item;
end;
.......
MyList := TMyList.Create;
MyItem := TMyItem.Create(1, "aaa");
MyList.FMyList.Create; !!!!!!!????
MyList.Items[1] := MyItem;
Просьба проконсультировать.
← →
begin...end © (2004-11-29 21:08) [1]> Elast (29.11.04 21:04)
> MyList.FMyList.Create; !!!!!!!????
Вы MyList и MyItem создавали НЕ ТАК. Почему же Вы FMyList создаёте ТАК?
← →
Elast (2004-11-29 21:20) [2]Нужно ли FMyList создавать для записи в Items?
← →
begin...end © (2004-11-29 21:26) [3]> [2] Elast (29.11.04 21:20)
> Нужно ли FMyList создавать для записи в Items?
Конечно, нужно. При записи в свойство Items вызывается метод SetItem, в котором используется FMyList. Как же его не создавать? Вопрос в другом - КАК создавать: FMyList := TList.Create. И делать это лучше в конструкторе класса TMyList. А уничтожать - в деструкторе.
← →
Elast (2004-11-29 21:37) [4]Конструктор модернизировал. Спасибо. Почему для записи в items[1]
ошибка List index out of bounds
← →
begin...end © (2004-11-29 21:48) [5]> [4] Elast (29.11.04 21:37)
> Почему для записи в items[1]
> ошибка List index out of bounds
А почему бы и нет? FMyList теперь создан, но в нём нет никаких Item"ов. Потому, что их туда никто не добавил. А Вы пытаетесь один из таких несуществующих элементов прочитать.
Вы хотите создать свой класс списка? Тогда, может быть, вместо FMyList: TList лучше использовать что-то вроде FMyList: array of TMyItem?
Посмотрите на реализацию того же TList. Или Вы хотите что-то другое сделать, - тогда что?
← →
begin...end © (2004-11-29 21:50) [6]К [5]:
> пытаетесь один из таких несуществующих элементов прочитать
Пардон, не прочитать, а записать туда что-то.
← →
Zelius © (2004-11-30 01:29) [7]ИМХО, TCollection и TCollectionItem больше подходят для таких целей...
← →
jack128 © (2004-11-30 02:31) [8]Zelius © (30.11.04 1:29) [7]
А, простите, какие цели у автора??
← →
GrayFace © (2004-11-30 05:21) [9]Elast (29.11.04 21:37) [4]
Add используй.
← →
Defunct © (2004-11-30 07:44) [10]Elast (29.11.04 21:04)
Зачем мутить нечно внутри которого TList, когда можно этоже нечто намутить наследуя TList?
TMyList = class(TList)
private
..
public
..
end;
перекройте требуемые методы и задача ваша решена.
← →
WondeRu © (2004-11-30 08:21) [11]дополнение:
PTMyItem = ^TMyItem;
мура, эту строчку вообще убрать, а остальное исправить так:
....
function TMyList.GetItem(Index: Integer): TMyItem;
begin
Result := TMyItem(FMyList.Items[index]);
end;
procedure TMyList.SetItem(Index: Integer; Item: TMyItem);
begin
FMyList.Items[index]) := Item;
end;
и последуй совету Defunct © (30.11.04 7:44) [10]
← →
icWasya © (2004-11-30 10:46) [12]и ещё -
желательно к TMyList добавить метод ADD и свойство Count с возможностью чтения/записи
← →
Думкин © (2004-11-30 10:48) [13]> [12] icWasya © (30.11.04 10:46)
А записи то зачем?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c