Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 10:13   #1
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию Проблемы с TObjectList

Мне нужно создавать динамически TEdit и добавлять в TObjectList , чтоб можно было работать с Edit’ами , как с элементами массива - типа так
Код:
 
EditList: TObjectList;

EditList[2].Text := '111';
Делаю так:
Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Contnrs;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
   TEditList = class(TObjectList)
  private
    function GetItems(Index: Integer): TEdit;
    procedure SetItems(Index: Integer; const Value: TEdit);

  public
    property Items[Index: Integer]: TEdit read GetItems write SetItems; default;
  end;

var
  Form1: TForm1;
  EditList: TObjectList;
  i: integer = 1;
  flag : boolean = true;
implementation

{$R *.dfm}

{ TEditList }

function TEditList.GetItems(Index: Integer): TEdit;
begin
  Result := TEdit(inherited GetItem(Index));
end;

procedure TEditList.SetItems(Index: Integer; const Value: TEdit);
begin
  inherited SetItem(Index, Value);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
Edit: TEdit;
begin
 if flag then
  EditList := TObjectList.Create(true);
  Edit := TEdit.Create(self);
  Edit.Parent := self;
  Edit.Top := i;
  Edit.Left :=  40;
  Edit.Name := Edit.ClassName + IntToStr(i);
  EditList.Add(Edit);
  i := i + 20 ;
 flag := false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 EditList[1].Text := '111'; // Тут ошибка -  EditList не присвоился класс TEdit
end;
Извеняюсь не точно написал - ошибка вылетает при компиляции (не объявленый индефикатор Text), EditList не присвоился класс TEdit , и у EditList нету свойств TEdit

EditList.Items[1].Text - тоже не получается

EditList[1].Text или EditList.Items[1].Text - мне кажется одинаковое выражения

Подскажите в чём ошибка
Зарание спасибо

Последний раз редактировалось lexaltd; 04.04.2009 в 11:01.
lexaltd вне форума Ответить с цитированием
Старый 04.04.2009, 10:41   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)а как у тебя может в List'е второй обьект получится, если ты при каждом нажатии этот самый Лист пересоздаешь?
2)попробуй EditList.Items[2].Text использовать, помоему так должно быть
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.04.2009, 00:01   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

EditList: TObjectList; откуда у Tobject свойство Text ? это свойство есть у Tedit.
Если используешь среду до D2009 , то необходимо просто явно привести к необходимому типу:
Код:
(EditList[1] as tedit).Text := '111';
Если используешь D2009 то лучше воспользоваться generic
Код:
list: Tobjectlist<Tedit>;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.04.2009, 20:26   #4
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
EditList: TObjectList; откуда у Tobject свойство Text ? это свойство есть у Tedit.
Если используешь среду до D2009 , то необходимо просто явно привести к необходимому типу:
Код:
(EditList[1] as tedit).Text := '111';
Если используешь D2009 то лучше воспользоваться generic
Код:
list: Tobjectlist<Tedit>;
Ипользую Delphi 7
Пытался делать как приведенно в примере http://forum.vingrad.ru/articles/topic-97983.html

Там написано(цитирую):

"Нужно создать свой собственный класс, который будет потомком TObjectList. Для этого требуется перекрыть методы SetItems и GetItems. В интерфейсной части модуля, после слова type, пропишите такой код:"

Код:
type
   TEditList = class(TObjectList)
  public
    property Items[Index: Integer]: TEdit read GetItems write SetItems; default;
  end;
"и нажмите Ctrl+Shift+C. В конце модуля сгенерируется:"
Код:
function TEditList.GetItems(Index: Integer): TEdit;
begin
  Result := TEdit(inherited GetItem(Index));
end;

procedure TEditList.SetItems(Index: Integer; const Value: TEdit);
begin
  inherited SetItem(Index, Value);
end;
"Теперь у нас есть класс, предназначенный для хранения TEdit’ов."

"Теперь можно работать с Edit’ами так же, как с элементами массива"

Код:
EditList[2].Text := '111';
Может я не так понял ???

Последний раз редактировалось lexaltd; 06.04.2009 в 20:41.
lexaltd вне форума Ответить с цитированием
Старый 06.04.2009, 20:40   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

не так.
Код:
EditList.items[2].Text := '111';
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.04.2009, 20:53   #6
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
не так.
Код:
EditList.items[2].Text := '111';
EditList.Items[1].Text - тоже не получается

EditList[1].Text или EditList.Items[1].Text - мне кажется одинаковое выражения

Я в самом верху уже писал

P.S. Там вверху я написал полностью код , можно вставить и посмотреть

Последний раз редактировалось lexaltd; 06.04.2009 в 20:56.
lexaltd вне форума Ответить с цитированием
Старый 06.04.2009, 20:54   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Чем вас не устроил вариант в 3
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53
проблемы отображения Karl_Karlovi4 Общие вопросы Delphi 12 31.12.2007 09:21
проблемы со строками MAD Помощь студентам 1 23.12.2007 17:31
Проблемы с прорисовкой :/ Ilidan Общие вопросы по Java, Java SE, Kotlin 0 16.10.2007 01:46