Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём неправильно. Необходимо обновить браузер или попробовать использовать другой.
ОБСУЖДЕНИЕ
Цикл по однотипным компонентам формы
12 ответов
8,6 тыс.
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Поискал по форуму, но ответа не нашёл. Нужно организовать цикл по однотипным компонентам формы чтобы менять/проверять их параметры. Например узнать состояние 32 радио-баттон на форме. Не могу сообразить как такое сделать в цикле.
Не знаю как реализовать конкретно, но подозреваю, что нужно создать массив-структуру, в которую поместить объекты, а потом обращиться к ним по индексу.
Народ! Кто знает? Откликнитесь! Мне тоже такая штука нужна будет скоро.
for I:= 0 to Form1.ControlCount-1 do
ShowMessage(Form1.Controls[i].ClassName);
Думаю что в С тоже такое есть.
Просто используем свойство формы ControlCount. А контролировать тот ли это тип контрола - дело прикладное. Например, можно вот так:
Код:
for I:= 0 to Form1.ControlCount-1 do
if Form1.Controls[i].ClassNameIs('TButton')
then ShowMessage('Нашли кнопку');
Для сравнения так же можно использовать такие методы контролов как Class, ClassType.
Просто стоит поискать их аналоги в на языке С, думаю они есть
Хм. Искать компоненты на своей же форме, а потом по Name разбираться то я нашёл или нет - это интересный способ, но я бы предпочёл способ, когда можно самому из нужных компонентов создать массив указателей на компоненты тех же радио-баттон и обращаться к ним типа:
Код:
if (myRadioButtons[1]->Checked)
if (myRadioButtons[2]->Checked)
if (myRadioButtons[3]->Checked)
Вот только что это за myRadioButtons и как его описать?
FindComponent решает мои проблемы, но мой вопрос (выше) по поводу массива указателей на компоненты остаётся открытым.
С ним бы было просто удобней работать. Я не знаю, может это и просто невозможно спрограммировать?
Хм. Искать компоненты на своей же форме, а потом по Name разбираться то я нашёл или нет - это интересный способ, но я бы предпочёл способ, когда можно самому из нужных компонентов создать массив указателей на компоненты тех же радио-баттон и обращаться к ним типа:
Код:
if (myRadioButtons[1]->Checked)
if (myRadioButtons[2]->Checked)
if (myRadioButtons[3]->Checked)
Вот только что это за myRadioButtons и как его описать?
Сравнение идет не по Name, а по ClassName, что совсем разные вещи. И это лишь вариант, а не руководство к действию. Есть другие способы. Например, сравнивать с существующим классом, использовать AS с контролем на ошибку и т.д.
А вот если использовать FindComponent - то тогда точно придется использовать Name, что нибудь типа TEdit1. И стоит сделать осмысленные названия тогда унифицированность пропадет.
По поводу myRadioButtons[1] - никто не мешает создать скажем коллекцию или какой нибудь лист чтоб в нем хранить указатели на нужные элементы.
Мое мнение - всеж сравнивать по имени класса. Или использовать коллекцию указателей где будут только нужные данные и тогда поиск отпадет.
Компонент является объектом, а значит с ним можно связать какие нибудь данные, в частном случае номер в массиве. К примеру у всех компонентов есть пустое свойство Tag. Что мешает в данном свойстве запоминать индекс компонента в массиве? С помощью перечисления в цикле, проверяем нужного ли класса компонент, если нужного, читаем его свойство Tag, то бишь определяем индекс компонента в массиве.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь. Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.