Динамичесткое обращение к компаненту
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:
а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}
Подскажите, никак не могу допереть...
Вобщем на форме есть несколько копмпанентов ну например Table1 Table2 Table3.
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:
а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}
Подскажите, никак не могу допереть...
Создай масив етих компонентов и обращайся к ним по индексу :)
Вобщем на форме есть несколько копмпанентов ну например Table1 Table2 Table3.
Как можно написать функцию, что-бы в нее передавался номер компанента, в данном случаи 1, 2,3
Ну типа того:
а(i=1)
{
Table->(ну че-то делаем наприме с ней)
}
Подскажите, никак не могу допереть...
У компонента во первых есть свойство Tag - которое можно(и нужно ) использовать в данном случае.
Rebbit
Форма сама является контейнером внутри которого можно обращатся к элементам по индексу. Зачем еще массив?
int tg;
if(int i=0;i < ContrlCount;i++){
tg = Form1->Controls->Tag;
//Ну а дальше уже работаешь с конкретными компонентами.
switch(tg){
case 0:
((TEdit*)Form1->Controls)->Text = "Ok";
break;
case 1:
((TLabel*)Form1->Controls)->Caption = "1";
break;
case 2:
...
}
}
Если используешь компонент который не наследует от TControl - то естественно вместо ControlCount ComponentCount и обращатся к Components[]
Например у меня есть компанент Query16 значения Tag у него 16, он находится на форме Tables, мне надо до него добраться, но на строке
int count = ((TQuery*)Tables->Controls[q])->RecordCount;
вылетает ошибка
"Access violation at 0x4be43541: read of adress 0xd098e990"
Может ли это быть потому что функция находится не на форме Tables, а на другой? Или в чем может быть причина? q кстати равно 16.
А значение Tag соответствует индексу элемента?
Например у меня есть компанент Query16 значения Tag у него 16, он находится на форме Tables, мне надо до него добраться, но на строке
int count = ((TQuery*)Tables->Controls[q])->RecordCount;
вылетает ошибка
"Access violation at 0x4be43541: read of adress 0xd098e990"
Может ли это быть потому что функция находится не на форме Tables, а на другой? Или в чем может быть причина? q кстати равно 16.
Прочитай плиз мой пост до конца -
У тебя как раз тот случай. При условии конечно - что Tables в данный момент у тебя реально существует. Вобщето как раз для таких случаев лучше использовать DataModule или фрейм, а ни как не форму.
Вобщето как раз для таких случаев лучше использовать DataModule или фрейм, а ни как не форму.
Может я чурбан неотесаный, но если у нево ети компоненты одного типа, то почему не взять елементарный масив, а использовать все ети (непонятно как роботающие) сложные вещи.
Простота залог успеха.
Может я чурбан неотесаный, но если у нево ети компоненты одного типа, то почему не взять елементарный масив, а использовать все ети (непонятно как роботающие) сложные вещи.
Простота залог успеха.
Простота говорят - хуже воровства :)
Почему непонятно как работающие? Можно формировать конечно массивы с указателями - но почему ты в таком случае уверен, что знаешь как работают эти массивы? :) И где здесь та простота - если ты формируешь структуру параллельную существующей? Ведь по сути - твой массив не приводит к уменьшению размера программы, не повышает ее эффективность - ты ведь форму будешь использовать по прежнему. Не приводит кстати к более надежной работе - потому как у тебя появляется дополнительный объект для которого будет выделятся память, состояние которого нужно контролировать и т.д.
Может быть я просто чего то не учел -плиз объясни.
Огромное спасибо.
А массив я тоже не вижу смысла создавать, а так бы создал уже давно :)