![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как циклом перебрать все компоненты одного рода? [D7, XP]
Lebedev © (2007-06-27 07:44:00)У меня в проекте содержится 20 компонентов RadioGrioup. Мне, при нажатии на кнопку, необходимо проверить во всех ли них был сделан выбор. Хочется в цикле организовать обращение к свойству ItemIndex. Но КАК в цикле организовать перебор всех этих компонентов.
Спасибо!
Ega23 (2007-06-27 10:56:00) [1]1. Значение BitBtn1.ModalResult чему равно?
2.
for i := 0 to ComponentCount -1 do
if (Components[i] is TRadioGroup) then
if TRadioGroup(Components[i]).ItemIndex=-1 then
begin
t:=1;
Break;
end;
Зачем дальше-то перебирать?
Lebedev (2007-06-27 10:54:00) [2]Все эти RadioButton расположены как раз на модальной форме, которая появляется при запуске программы.
Плохиш (2007-06-27 10:54:00) [3]ModalResult := mrNone
PS. Мозги когда включать будем, а то сгниют...
Lebedev (2007-06-27 10:52:00) [4]А вот такой вопрос.
Могли этот код стать причиной следующего.
Я этот код поставил на ажитие конпки
procedure TFLog.BitBtn1Click(Sender: TObject);
var i,t: integer;
begin
t:=0;
for i := 0 to ComponentCount -1 do begin
if (Components[i] is TRadioGroup) then
begin
if TRadioGroup(Components[i]).ItemIndex=-1 then begin
t:=1
end;
end;
end;
if t=1 then showmessage('message') else
begin
{kod}
end;
end;
И сейчас, когда я, при появлении сообщения, нажимаю кнопку "Ок", то моя модальная форма автоматически закрывается и управление переходит к главной форме. Такого раньше не было. Форма то не должна закрываться.
Lebedev (2007-06-27 10:23:00) [5]Спасибо большое. Сейчас заработало.
>Откуда вы вообще взяли идентификатор radiogroup[i]?
Да я сам знал, что это не правильно. Просто написал для задания вопроса. ))
Однокамушкин (2007-06-27 10:05:00) [6]Откуда вы вообще взяли идентификатор radiogroup[i]?
for i := 0 to ComponentCount -1 do begin
if (Components[i] is TRadioGroup) then
begin
if TRadioGroup(Components[i]).ItemIndex=-1 then
showmessage('message');
end;
end;
И ScrollBox1 надо убрать, потому что Components даёт доступ к тем объектам, для каторых данный является owner-ом, а owner-ом всех компонетов, созданных в design-time, является сама форма, независимо от того, на чём они визуально лежат... ScrollBox1 является для них parent-ом, так что перебирать через ScrollBox1 тоже можно (и так даже будет быстрее), но тогда надо использовать не Components, а Controls (и, соответственно, не ComponentCount, а ControlCount)... Это вам для самостоятельной работы :)))
Lebedev (2007-06-27 09:57:00) [7]этот код не работает
Lebedev (2007-06-27 09:56:00) [8]Что то не получается (((
for i := 0 to ScrollBox1.ComponentCount -1 do begin
if (ScrollBox1.Components[i] is TRadioGroup) then
begin
if radiogroup[i].ItemIndex=-1 then
showmessage('message');
end;
end;
Как внутрициклы обратиться к своиству ItemIndex?
Lebedev (2007-06-27 09:41:00) [9]Спасибо!
Pohil (2007-06-27 08:50:00) [10]
for i := 0 to ScrollBox.ComponentCount -1 do begin
if (ScrollBox.Components[i] is TRadioGroup) then <здесь проверяешь чего надо проверять>
end;
> Но КАК в цикле организовать перебор всех этих компонентов.
Вот так вот.
Lebedev (2007-06-27 08:13:00) [11]Все Radiogroups у меня находятся в ScrollBox. Это важно?
Lebedev (2007-06-27 08:11:00) [12]Можно чуть подробнее. Я не понял. (((
if (Owner.Components[i] is TRadioGroup) then ...
тогда что?
Pohil (2007-06-27 08:03:00) [13]Ну это к тому, что я не знаю где у него эти RadioGroup находятся
Loginov Dmitry (2007-06-27 07:53:00) [14]Owner зачем?
Pohil (2007-06-27 07:48:00) [15]
if (Owner.Components[i] is TRadioGroup) then ...