int max_table_id = 20; // это может быть например кол-во строк в таблице из БД
for (int i=0; i < max_table_id; i++)
{
TCheckBox * temp = new TCheckBox(Form1); // создаём CheckBox на Form1
temp->Name = "chb"+IntToStr(i); // уникальное имя "chb0", "chb1" и т.д.
temp->Caption = "Checkbox "+IntToStr(i); // здесь любая строка, это текст справа от CheckBox'а
temp->Left = 8; // все от левого края на 8px
temp->Top = 8+i*(temp->Height+2); // располагаем так, чтобы не накладывались друг на друга
temp->Checked = false; // или true - в зависимости от того, что тебе нужно показывать этими CheckBox'ами
temp->Parent = Form1; // указываем "родителя" нового компонента
// temp->OnClick = CheckBoxClick; // здесь ты задаёшь обработчик события OnClick
temp->Visible = true; // показываем
}
Динамическое создание компонентов
Например скажем у меня есть таблица в базе данных. И для каждой новой записи я должен показать новый checkbox. И управлятЬ этим checkboxoм по имени. Проблема в том как дать название каждому новому компоненту и как ссылаться на него по иуникальному имени
Цитата: swordholder
Как можно управлять динамически созданными компонентами.
Например скажем у меня есть таблица в базе данных. И для каждой новой записи я должен показать новый checkbox. И управлятЬ этим checkboxoм по имени. Проблема в том как дать название каждому новому компоненту и как ссылаться на него по иуникальному имени
Например скажем у меня есть таблица в базе данных. И для каждой новой записи я должен показать новый checkbox. И управлятЬ этим checkboxoм по имени. Проблема в том как дать название каждому новому компоненту и как ссылаться на него по иуникальному имени
chb->Name = "FieldName" + "Value";// например. если это будет уникальное значение
TCheckBox* chb = (TCheckBox*)MainForm->FindComponent("FieldNameValue");
тут ведь ты использоваеш chb до того как объявляеш как это может быть?
1) chb->Name = "FieldName" + "Value";// например. если это будет уникальное значение - ответ на вопрос: "как дать название каждому новому компоненту.."
2) TCheckBox* chb = (TCheckBox*)MainForm->FindComponent("FieldNameValue"); - ответ на вопрос: " как ссылаться на него по иуникальному имени"
ЗЫ: :-)
Как тогда быть с chb объектом как его объявить будь добр облегчи мне жизнь ради Бога...
TCheckBox* chb;
еще один.
Цитата: Тень Пса
еще один.
PS: автор, используешь и объявляешь - пишется с мягким знаком :D
PS: автор, используешь и объявляешь - пишется с мягким знаком :D
это изза торопливости.
Ну я ведь не в олимпиаде по русскому языку участвую (раньше участвовал)
и вообще это уже оффтоп.
А почему именно по имени? Раз уж ты его их сам создаешь, почему бы просто не запихвть их в массив?
Цитата: wanja
А почему именно по имени? Раз уж ты его их сам создаешь, почему бы просто не запихвть их в массив?
По сути они и так помещаются в массив Сomponets на форме. Что мешает получать размер массива и к имени нового компонента просто добавлять число - размер массива? Кроме того не понятно - зачем динамически создав компоненты заморачиваться с именами и т.п. - почему не использовать то же свойство Tag например?