|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Количество компонентов на Panel
Как узнать количество компонентов на Panel или GroupBox.
Когда использую Код:
GroupBox.ComponentCount |
#2
|
|||
|
|||
Похоже, что придется считать в цикле (с учетом свойства Parent) ...
|
#3
|
|||
|
|||
Как вариант, что-то вроде этого :
Код:
procedure TForm1.Button3Click(Sender: TObject); Var c,i : integer; begin c:=0; for i:=0 to (Form1.ComponentCount-1) do begin if (Form1.Components[i] is TControl) then begin if ((Form1.Components[i] as TControl).Parent.Name='GroupBox1') then c:=c+1; end; end; ShowMessage('Count='+IntToStr(c)); end; |
#4
|
|||
|
|||
Придётся перебирать все компоненты формы, чтобы узнать, что расположено в GroupBox? На форме до фига компонентов. Программа работать будет слишком медленно.
|
#5
|
|||
|
|||
Расскажу подробней зачем это надо.
Программа делает отчёты. Пользователь выбирает из RadioGroup тип отчёта. Появляется Panel или GroupBox, на которой он (пользователь) может устанавливать параметры отчёта. Например, отчёт по одной фабрике, или по двум, или...и т.д. Поля для ввода фабрики, по которым делается отчёт, создаются динамически. Пользователь нажимает кнопку "Добавить фабрику" и в GroupBox появляется ещё одно поле. Количество этих полей должно равняться количеству столбцов в отчёте (1 столбец - 1 фабрика). Вот для этого и нужно посчитать количество полей? Просматривать каждый компонент формы слиииишкооом дооолгооо. |
#6
|
|||
|
|||
Вы говорили о компонентах :
Цитата:
а не о "полях".. |
#7
|
|||
|
|||
Насколько я помню, свойство ComponentCount (у TComponent) отражает кол-во "дочерних" компонент, для которых он является Владельцем.
Когда Вы кидаете какой-то компонент на другой (на форме) , то форма становится владельцем. Но можно сделать так : Код:
procedure TForm1.Button4Click(Sender: TObject); Var Lab : TLabel; begin Lab:= TLabel.Create(GroupBox1); //!!! Lab.Parent:=GroupBox1; ShowMessage('Кол-во='+IntToStr(GroupBox1.ComponentCount)); end; Но здесь есть один нюанс. Когда владельцем компонента является форма - она сама же освобождает ресурсы (при уничтожении формы). А в случае, когда владелец - НЕ форма - придется программисту самому отслеживать "мусор". |
#8
|
|||
|
|||
Чтобы узнать количество компонентов на GroupBox надо обратиться к свойству ControlCount, т.е. GroupBox.ControlCount = равно количество элементов которые находятся на боксе. А свойство ComponentCount это другое сам незнаю чо)))
|