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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2011, 23:12   #1
Nefra
Новичок
Джуниор
 
Регистрация: 16.09.2011
Сообщений: 2
По умолчанию Массив через Еdit

Нужно заполнить массив из введенных в поля Еdit данных.
Полей 10, соответственно 10 параметров надо записать в массив.
Писать 10 раз a[1]:=Edit1.text a[2]:=Edit2.text и т.д как-то не логично.
Нужен собственно цикл заполнения массива n элементов из n эдитов.
ЗЫ тапками не бросать. только с Паскаля пришла
Nefra вне форума Ответить с цитированием
Старый 17.09.2011, 00:06   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

допустим, они у Вас все на форме расположены, а не на панели.
Код:
with Form1 do
for i:=1 to 10 do
begin
   a[i]:=TEdit(controls[i-1]).Text;//на форме нумерация элементов, кажись, с нуля
end;
а дальше, если всё работает, можете менять число 10 на ваше любимое N
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 17.09.2011, 00:57   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

категорически не рекомендую пользоваться способом, предложенным NetSpace.
малейшее изменение порядка компонентов на форме и всё - крах программы!

тогда уже можно применить способ с поиском нужных компонентов на форме Form1:
Код:
var
  MyComponent: TComponent;
  i : integer;
begin
 for i:=1 to n do begin
   MyComponent :=  Form1.FindComponent('Edit'+IntToStr(i));
   if MyComponent <> nil then
    a[i] := TEdit(MyComponent).Text;
  end;
p.s. данный код не проверяет, является ли найденный на форме Form1 компонент с именем EditX (где х число от 1 до n) собственно TEdit. При желании такую проверку несложно добавить.

и ещё совет. Для таких целей, как ручное заполнение\изменение массива НАМНОГО удобнее воспользоваться компонентом TStringGrid - там и заголовки добавить можно, да и перебирать ячейки намного проще, надежнее и удобнее!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2011, 01:38   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А ведь можно проще..
Код:
procedure TForm1.btn1Click(Sender: TObject);
var
 ts:TStringList;
 mass:array of string;
 i:integer;
begin
  ts:=TStringList.Create;
  ts.Delimiter:=',';     //задаём разделитель строки
  try
   ts.DelimitedText:='1,2,3,4,5,6,7,8,9,0';  //Элементы массива разделённые запятой
    SetLength(mass,ts.Count);   //Уст. длинну массива равной кол-ву элементов.
     for i:=0 to ts.Count -1 do
       begin
         Mass[i]:=Ts.strings[i];   //Заполняем
       end;
  finally
    FreeAndNil(ts);
  end;
end;
И это пример со строкой в токовой массив, а если прикрутить тип Variant то можно вообще что угодно понапихать. Ну да ладно..
Тс. нужно чтобы из строки выгребать элементы массива раделённые чем-то и пихать эти элементы в array of что-то.
Человек_Борща вне форума Ответить с цитированием
Старый 17.09.2011, 03:57   #5
Nefra
Новичок
Джуниор
 
Регистрация: 16.09.2011
Сообщений: 2
По умолчанию

Благодарю за помощь) подошел метод поиска на форме, за это отдельное спасибо. Если можно задам здесь ещё один вопрос.
Как сделать проверку на заполненность Edit? Что бы цикл чтения не происходил если эдит не заполнен.
Nefra вне форума Ответить с цитированием
Старый 17.09.2011, 08:26   #6
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Nefra Посмотреть сообщение
Благодарю за помощь) подошел метод поиска на форме, за это отдельное спасибо. Если можно задам здесь ещё один вопрос.
Как сделать проверку на заполненность Edit? Что бы цикл чтения не происходил если эдит не заполнен.
Код:
if Edit1.text<>'' then //едит заполнен, делаем что нужно
else //едит не зполнен, продолжаем действия
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 17.09.2011, 08:31   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
  if (MyComponent <> nil)and(MyComponent is TEdit)and(TEdit(MyComponent).Text='') then
    a[i] := TEdit(MyComponent).Text;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2011, 10:20   #8
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от Nefra Посмотреть сообщение
Благодарю за помощь) подошел метод поиска на форме, за это отдельное спасибо. Если можно задам здесь ещё один вопрос.
Как сделать проверку на заполненность Edit? Что бы цикл чтения не происходил если эдит не заполнен.
Вопрос можно понять двояко:
1 - не читать из текущего Edit если Text=''
2 - не выполнять весь обход если хотя бы один из них пуст
1 уже ответили, а для 2 предлагаю в процедуре обработки поставить обход два раза, первый - "трутень" - в массив ничего не читает, но проверяет заполненность каждого компонента, при отстутствии текста (в любом) - выставляет булеву переменную EditsArrayIsIncomplete в true, это флаг - набор данных не полон и реально читать не надо:

Код:
см. код Stilet'a
var
EditsArrayIsIncomplete:boolean;
begin
EditsArrayIsIncomplete:=true;
...
if (MyComponent <> nil)and(MyComponent is TEdit)and(TEdit(MyComponent).Text='') then
   EditsArrayIsIncomplete:=false ;
...
if EditsArrayIsIncomplete then 
 begin
  запускам цикл и забираем значения
 end;
...
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 17.09.2011, 12:33   #9
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

Цитата:
категорически не рекомендую пользоваться способом, предложенным NetSpace.
малейшее изменение порядка компонентов на форме и всё - крах программы!
Понаписали-то. А можно было бы просто на форму кинуть панель и на панели разместить все ваши EDIT'ы. тогда просто писали бы
Код:
with Panel1 do...
а дальше всё то же самое.
и не зависели бы от количества и расположенния компонентв на форме
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 17.09.2011, 12:59   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и не зависели бы от количества и расположенния компонентв на форме
ну и зависели бы от расположения и порядка элементов на панели... Это что - принципиально улучшает (делает его более надёжным) данный код?! Да никоим образом!


p.s. впрочем, автор темы уже решил эту проблему...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на совпадения еdit и label amator_roma БД в Delphi 2 13.05.2011 02:47
Запись даных с DateTimePicker в Еdit amator_roma БД в Delphi 2 01.12.2010 22:05
надо сделать дек через массив и через список. CHUCKe Помощь студентам 4 20.11.2010 17:23
Мат. операции в поле еdit Yaga Общие вопросы Delphi 11 29.06.2009 22:30