Вот две малениких процедурки, присваивающие заголовкам всех компонентов Label
на всех страницах компонента NoteBook значение 'Foo'. (Я вам не говорил, что это
будет ПОЛЕЗНЫМ примером!)
procedure TForm1.Button1Click(Sender: TObject);
var
M, N: Word;
beginfor N := 0 to TabbedNotebook1.Pages.Count - 1 dowith TabbedNotebook1.pages.Objects[N] as TTabPage dofor M := 0 to ControlCount - 1 doif Controls[M] is TLabel thenwith Controls[M] as TLabel do
Caption := 'Foo';
end;
procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
Notebook1.PageIndex := TabSet1.TabIndex;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
M, N: Word;
beginfor N := 0 to TabbedNotebook1.Pages.Count - 1 dowith Notebook1.pages.Objects[N] as TPage dofor M := 0 to ControlCount - 1 doif Controls[M] is TLabel thenwith Controls[M] as TLabel do
Caption := 'Foo';
end;
Пример итерации над контролами в приложении на Delphi!
Давайте разберемся, что эти процедуры делают:
Button1Click
Эта процедура устанавливает свойство Caption для всех компонентов TLabel на каждой странице TabbedNotebook1 в значение 'Foo'. Она это делает следующим образом:
1. Итерация над страницами заметки с помощью цикла for.
2. Для каждой страницы она использует свойство ControlCount для итерации над контролами на этой странице.
3. Для каждого контрола она проверяет, является ли он компонентом TLabel с помощью оператора if.
4. Если контрол является компонентом TLabel, то она устанавливает его свойство Caption в значение 'Foo'.
TabSet1Change
Эта процедура вызывается при изменении активной страницы в TabSet1. Она обновляет индекс активной страницы Notebook1 для соответствия новому индексу вкладки. Это обеспечивает, что активная страница заметки всегда синхронизирована с текущим выбранным вкладкой.
Button2Click
Эта процедура идентична Button1Click, за исключением того, что она использует Notebook1.Pages вместо TabbedNotebook1.Pages. Обе процедуры достигают одного и того же результата: установка заголовков для всех контролов-етикет на каждой странице заметки в значение 'Foo'.
Альтернативное решение:
Вместо итерации над контролами можно использовать метод FindComponent для поиска всех компонентов TLabel и затем установить их заголовки в цикле. Это подход более эффективен и легче поддерживать.
Например, вы можете создать отдельную процедуру, как это:
Этот подход более компактен и легче поддерживать, особенно если у вас есть несколько мест, где вам нужно установить заголовки контролов-етикет.
В статье описывается два небольших кода на Delphi, которые итерируют элементы управления компонента Notebook и присваивают заголовкам всех Label-компонентов значение 'Foo'.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.