Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Текстовое поле как массив   Найти похожие ветки 

 
ko   (2004-07-10 16:55) [0]

Меня интересует такая фишка: как использовать текстовое поле как массив? Например: есть текстовое поля Edit34  и Edit35, нужно при известном b=34,или b=35 выполнить Edit[b].Text=…


 
Rem   (2004-07-10 17:07) [1]

sNum := "34"; // это известно по условию задачи
TEdit(FindComponent("Edit" + sNum)).Text := ...;


 
афвуд   (2004-07-10 17:09) [2]

var Edit:TEdit
.....
.....
Edit=Form1.FindComponent("Edit"+IntToStr(b)) as TEdit;
// Вот теперь колбасься с этим Edit. Оно будет то самое, что нужно.


 
Rem   (2004-07-10 17:14) [3]

А список компонентов ("текстовое поле как массив" - круто сказано) хранится в свойстве Components. Только это не массив, а именно список.
 if (Components[34] is TEdit) then
   TEdit(Components[34]).Text := ...;

В общем случае лучше не опираться на фиксированные значения индексов элементов в массиве. Во-первых, компоненты регистрируются в списке динамически, во время выполнения. А во-вторых, (и это следствие первого) этот индекс может меняться, да и узнать его можно только во время выполнения.


 
Igorek ©   (2004-07-10 20:14) [4]


> Rem   (10.07.04 17:07) [1]
> афвуд   (10.07.04 17:09) [2]

Неправильно. Ничто не мешает напр. лейбу назвать "Edit34"


 
Mim1 ©   (2004-07-10 20:24) [5]

[4] Igorek ©   (10.07.04 20:14)

Так же может не найтись указанный компонент.
Очень даже правильно, кому как не програмисту значть как называются компоненты.
В случае [2] афвуд   (10.07.04 17:09)  бедет сгенерированно исключение - довольно адекватное и уместное действие.


 
KilkennyCat ©   (2004-07-10 20:28) [6]


> Mim1 ©   (10.07.04 20:24) [5]


В данном случае даже неважно, знает программер название или не очень :) > Igorek ©   (10.07.04 20:14) [4] не увидел главного - ищется TEdit, а лэйбла - TLabel


 
Igorek ©   (2004-07-11 15:38) [7]

> Mim1 ©   (10.07.04 20:24) [5]
> KilkennyCat ©   (10.07.04 20:28) [6]
Я просто хотел сказать, что решение недоскональное в том смысле, что имена могут измениться и код перестанет работать.


> Igorek ©   (10.07.04 20:14) [4] не увидел главного - ищется
> TEdit, а лэйбла - TLabel

Причем тут это? FindComponent не принимает ограничения по поиску в виде класса.

Короче я бы написал так:

var
 C: TComponent;
begin
 C := Form1.FindComponent("Edit34");
 if Assigned(C) then
   if C is TEdit then
     with TEdit(C) do
     ...//юзаем С


 
Mim1 ©   (2004-07-11 16:02) [8]


> Я просто хотел сказать, что решение недоскональное

В общем случае код правильный, так что впредь рекрмендую сначало думать а потом писать, чтобы потом небыло фраз "Я просто хотел сказать".


 
Igorek ©   (2004-07-11 16:43) [9]


> Mim1 ©   (11.07.04 16:02) [8]
> В общем случае код правильный,

Как раз в общем случае код неправильный - в том смысле, что имена могут измениться и код перестанет работать. Код правильный в частном случае.


> так что впредь рекрмендую сначало думать а потом писать

Взаимно.


 
Mim1 ©   (2004-07-11 19:53) [10]

Слушайте, тогда после созданий экземпляра обьекта проверяйте его тип, мы ведь сами себе не доверяем (по крайней мере в вашем случае).

Случай когда компонент типа TLabel имеет имя Edit34 как раз частный, а не общий. Хотя иногда слова не могут отразить реальной жизни. Думается что фразами "неправильно" вы уже всех замучали так же как и багами в приводимвых приводимых примерах, и вместо того чтобы извинится вы встуаете в словестные перемплки, разводите демагогию и т.п. Кажется уже говорили что вы не можете остановиться. признайте что ваша фраза "неправильно" была неуместна. Весь пост был бы верен если бы не эта фраза.

LMD


 
Igorek ©   (2004-07-12 17:15) [11]


> Mim1 ©   (11.07.04 19:53) [10]

ignored by my LMD firewall


 
Igorek ©   (2004-07-12 18:09) [12]


> Igorek ©   (10.07.04 20:14) [4]
>
> > Rem   (10.07.04 17:07) [1]
> > афвуд   (10.07.04 17:09) [2]
>
> Неправильно. Ничто не мешает напр. лейбу назвать "Edit34"

Правильно, если допустить, что "текстовое поле" - экземпляр компонента TEdit.


 
Тимохов ©   (2004-07-12 18:13) [13]

Не заводите флуд.
Игорек привел уместное замечание.
Зачем трепаться.


 
Rem   (2004-07-12 18:20) [14]

2 Igorek
 Читаем вопрос. Внимательно. Сосредоточенно. До полного просветления.
 "текстовое поле как массив"
 Все остальное - на откуп программиста.

Вот это:

var
C: TComponent;
begin
C := Form1.FindComponent("Edit34");
if Assigned(C) then
  if C is TEdit then
    with TEdit(C) do
    ...//юзаем С

ТУФТА! При таком написании вы не сдвинетесь с первой формы к концу жизни!

Если уж такое пишете - напишите просто:
 Edit34.Text := ...;

Зачем его искать (FindComponent)? Вы же пишете "Edit34"! Или вы не знаете в момент проектирования, что такое у вас Edit34? Вы все компоненты искать так будете? И писать ступеньками десятки if"ов? Или вам хватит ума поменять Edit34: TEdit на Edit34: TLabel?
Не советуйте то, что знаете только в теории!


 
Igorek ©   (2004-07-13 13:30) [15]


> ТУФТА! При таком написании вы не сдвинетесь с первой формы
> к концу жизни!

Голословно и оффтоп. Можете создать ветку в Потрепаться.


> Если уж такое пишете - напишите просто:
>  Edit34.Text := ...;

Блестяще! Как я не подумал. :-(
Вот одно из самых красивых, быстрых и главное адекватных и уместных по безглючности решений:
Добавляем в форму св-во.

property TextFieldAsArray[Index: Integer]: TEdit read GetTFAA;
...
function TForm1.GetTFAA(Index: Integer): TEdit;
begin
 if Index = 34 then
   Result := Edit34
 else
   if Index = 35 then
     Result := Edit35
   else
     Result := FindComponent(".");
end;


Кстати я в своей практике стараюсь, когда пишу код, не полагаться на другой свой код, поскольку он может позже поменяться, и прога будет глючить. Напр. предпочитаю использовать FreeAndNil вместо .Free. Это мне рекоммендовал и программист, у которого практики поболее моего.

> Не советуйте то, что знаете только в теории!

Взаимно.

> До полного просветления.

Так не бывает.

> Весь пост был бы верен если бы не эта фраза.

Большой LOL!



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.034 c
1-1089555687
Crypter
2004-07-11 18:21
2004.07.25
Быстрая работа с TRichEdit


14-1088829649
Василий Семенов
2004-07-03 08:40
2004.07.25
Какие форум/форумы на ваш взгляд заслуживают внимания?


9-1081921850
Мараканец
2004-04-14 09:50
2004.07.25
Шейдеры


14-1089121529
QuasiLamo
2004-07-06 17:45
2004.07.25
SQL


3-1088753741
white
2004-07-02 11:35
2004.07.25
Подскажите какой компонент поможет в решении следующей задачи.