Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация цикла для компонентов, Можно ли? Как? 
:(
    Опции темы
Abrek
Дата 1.4.2004, 13:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Извините за потенциально ламерский вопрос, но обстоятельства вынуждают.
Пишу под Borland Builder5.
Допустим у меня на форме 10 компонентов TEdit: Edit1, Edit2,.....Edit10.
Можно ли совершать как-то преобразования с ними в цикле? Надеюсь будет понятно:
fot(i=1;i<10;i++)
{
Edit(i).Text="666";
}
Как это организовать по-настаящему?
  Вверх
Borisff2003
Дата 1.4.2004, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

int i,j;
  char t[33];
  AnsiString str;
//вместо 5 скока тебе надо
  for(j=1;j<5;j++)
  {
     //формируешь имя компанента
       str="Edit";
       str+=j;
    for(i=0;i<ComponentCount;i++)
    {
       if(Components[i]->Name==str)
          dynamic_cast<TEdit*>(Components[i])->Text="fg";
    }
  }


и надеемся что едиты это действительно эдиты


Это сообщение отредактировал(а) Borisff2003 - 1.4.2004, 14:24
--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Abrek
Дата 1.4.2004, 15:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Огромное пасибо!
  Вверх
DenDen
Дата 2.4.2004, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообще говоря, имеются еще 2 банальных пути, не требующие, однако, просмотра ысех компонентов и кастов(вообще, утверждается что cast'ы довольно длительная операция).
Путь 1) объявления массива ( void**) и вручную присваевание разным едитам разных указателей.
//
something
....
//
void** my_mas;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
my_mas=(void*)malloc(40);
my_mas[0]=(void*)Edit1;
my_mas[1]=(void*)Edit2;
my_mas[2]=(void*)Edit3;
my_mas[3]=(void*)Edit4;
my_mas[4]=(void*)Edit5;
my_mas[5]=(void*)Edit6;
my_mas[6]=(void*)Edit7;
my_mas[7]=(void*)Edit8;
my_mas[8]=(void*)Edit9;
my_mas[9]=(void*)Edit10;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=0;i<10;i++)
((TEdit*)my_mas[i])->Text="Hello World";
}

////something

Способ 2) Применяется, когда Едиты(много) или другие компоненты(еще больше) располагаются в вполне определенном порядке(например в колонку). В этом случае их лучше создавать динамически:
//something
TEdit** Ed;


__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Ed=new TEdit*[10];
int Top=something_1;
int Height=something_2;
int Left=something_3;
for(int i=0;i<10;i++)
{
Ed[i]=new TEdit(this);
Ed[i]->Parent=this;
Ed[i]->Left=Left;
Ed[i]->Top=Top;
Ed[i]->Height=Height;
Top+=Height;
}


}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for(int i=0;i<10;i++)
Ed[i]->Text="Hello Wrld";
}







PM MAIL   Вверх
Дрон
Дата 3.4.2004, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата
Путь 1) объявления массива ( void**) и вручную присваевание разным едитам разных указателей

Только зачем тип void*?
Проще объявить массив типа TEdit* тогда никаких cast'ов вообще не надо smile.gif



--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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