Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись значений из Edit в StringGrid, перенести значения 
:(
    Опции темы
6urunduk
  Дата 27.1.2010, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 27.1.2010

Репутация: нет
Всего: нет



Просмотрел результаты поиска, нашёл полезнве темы, но по моему вопросу нет :( Вот код
Код


var Components:array of TComponent;
...
...

For i:=1 to ComponentCount-1 do
begin
Components[i]:=(FindComponent(Format('Edit%d',[i])) as TEdit) ;
StringGrid.Cells[i,i]:=(Components[i] as TEdit).Text;
end;
...
нужно обойти все эиты на форме и информацию из них занести в СтрингГрид.Код компилируется, но появляется подсказка что "массив не был инициализирован". Как исправить?
PM MAIL   Вверх
~FoX~
Дата 27.1.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



6urunduk, SetLength
Может проще массив стринговый сделать? 


Это сообщение отредактировал(а) ~FoX~ - 27.1.2010, 22:36


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
6urunduk
  Дата 27.1.2010, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 27.1.2010

Репутация: нет
Всего: нет



~FoX~, что  SetLength?? не понял. ну сделаю я стринговцй массив, а как в него инфу из разных эдитов записывать? и потом в эдитах разного рода инфа (цифры, буквы, символы) smile 
PM MAIL   Вверх
kami
Дата 28.1.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Код не лишен недостатков, помимо не-инициализации массива.
1. Не помешает обозвать массив как-нибудь по другому, ибо форма тоже имеет свойство Components[i], что уже потенциальный глюкодром. Что из них (массив или свойство) выберет при компиляции Delphi - я навскидку и не скажу, надо смотреть, где объявлен массив.
2. Сперва нужно найти все едиты и занести их в массив, а уже потом, в другом цикле - выводить их в грид. Ибо получается: 
на форме далеко не всё - едиты, как минимум присутствует и TStringGrid.
Далеко не обязательно у едита будет имя Edit1, Edit2, Edit3.... (если так - то ССЗБ).
Пускай на форме 2 едита, 1 кнопка и 1 TStringGrid. В этом случае ComponentCount = 4.
Благодаря тому, что цикл идет не по всем компонентам (не учитывается индекс 0), получаем:
на первой итерации - заносим Edit1
на второй итерации - заносим Edit2
на третьей - такого edit нету, будет возвращено nil. При обращении к (Components[3] as TEdit).Text получаем AccessViolation благодаря тому, что Components[3]=nil.

Добавлено @ 00:49
Вообще - лучше так, хотя и здесь потенциальная ошибка - в StringGrid может просто не оказаться нужного количества ячеек:
Код

var
  i, j: integer;
begin
  j:=0;
  for i:=0 to ControlCount-1 do
    if Controls[i] is TEdit then
      begin
        StringGrid.Cells[j, j]:=(Controls[i] as TEdit).Text;
        inc(j);
      end;
end;


Это сообщение отредактировал(а) kami - 28.1.2010, 00:52
PM MAIL WWW   Вверх
~FoX~
Дата 28.1.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



6urunduk, SetLengt - устанавливает размерность массива, 
Цитата(6urunduk @  27.1.2010,  23:53 Найти цитируемый пост)
ну сделаю я стринговцй массив, а как в него инфу из разных эдитов записывать?


Код

var
  i: integer;
  EditData: TStringList;
begin
  EditData := TStringList.Create;
  EditData.Add('Заголовок если нужно');
  for i:=0 to ControlCount-1 do
    if Controls[i] is TEdit then EditData.Add((Controls[i] as TEdit).Text);

  StringGrid1.RowCount := EditData.Count;
  StringGrid1.Cols[1].Assign(EditData);
  EditData.Free;
end;


Цитата(6urunduk @  27.1.2010,  23:53 Найти цитируемый пост)
и потом в эдитах разного рода инфа (цифры, буквы, символы)
 В эдитах всегда текст!



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.