Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
1

Одно свойство нескольким элементам

29.10.2013, 22:25. Показов 6468. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать и возможно ли вообще применить одно свойство (например, Visible := True) двум и более элементам? Например эдиттекстам
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2013, 22:25
Ответы с готовыми решениями:

Возможно ли как-то автоматически поменять одно свойство для всех кнопок?
Предположим, у меня есть форма с 45 bitbtn'ами, и, вот, нужно у всех них поменять только одно...

Создание объектов по нескольким элементам
Доброго времени. Я почти совсем начинющий, не пинайте сильно. <div class="box">Element-1</div>...

Присвоить значение нескольким элементам массива
Можно-ли мгновенно присвоить конкретное значение нескольким (n) элементам массива, допустим...

Задать onclick сразу нескольким элементам
Например, имеется такая таблица: <table cellspacing="0" cellpadding="0"> <tr> ...

26
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
29.10.2013, 22:32 2
в дизайнтайме - выделить необходимые элементы и изменить им необходимое свойство (это необходимое свойство должно быть у всех выбранных экземпляров)
в рантайме - в цикле перебирать объекты по некоторому признаку и менять у них необходимое свойство
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
29.10.2013, 22:40  [ТС] 3
Цитата Сообщение от cotseec Посмотреть сообщение
в рантайме - в цикле перебирать объекты по некоторому признаку и менять у них необходимое свойство
А можете привести пример? А то вообще не понял как это. Меня интересует как эти свойства менять в коде
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
29.10.2013, 22:45 4
вот пример, по нажатии кнопки все эдиты и чекбоксы на форме становятся неактивными

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TEdit) or (Components[i] is TCheckBox) then
      begin
        TEdit(Components[i]).Enabled := False;
        TCheckBox(Components[i]).Enabled := False;
      end;
end;
1
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
29.10.2013, 22:49 5
Delphi
1
2
3
4
5
6
7
8
9
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do // цикл по всем компонентам
  begin
    if (Components[i] is TLabel) then // если текущий компонент - TLabel
      if ((Components[i] as TLabel).Tag = 5) then // если у текущего компонента значение Tag равно 5 (некоторый признак)
        (Components[i] as TLabel).Font.Color := $FF00FF; // то меняем  цвет текста метки (текущего компонента)
  end;
1
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
29.10.2013, 23:00 6
Цитата Сообщение от Arcor Посмотреть сообщение
begin TEdit(Components[i]).Enabled := False; TCheckBox(Components[i]).Enabled := False; end;
Достаточно одной таблетки
Delphi
1
TControl(Components[i]).Enabled := False;
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
29.10.2013, 23:31  [ТС] 7
Цитата Сообщение от Arcor Посмотреть сообщение
по нажатии кнопки все эдиты и чекбоксы на форме становятся неактивными
А если нужно несколько эдитов, но не все, а выборочные?
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
29.10.2013, 23:36 8
Цитата Сообщение от Digetix Посмотреть сообщение
А если нужно несколько эдитов, но не все, а выборочные?
Если сможешь по каким-то признакам/свойствам отличить выборочные от прочих, то никаких проблем.
0
angstrom
29.10.2013, 23:43 9
Этим признаком может служить Tag.
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
29.10.2013, 23:46  [ТС] 10
Цитата Сообщение от northener Посмотреть сообщение
Если сможешь по каким-то признакам/свойствам отличить выборочные от прочих, то никаких проблем.
Могу отличить. Я знаю их имена
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
29.10.2013, 23:47 11
Цитата Сообщение от Digetix Посмотреть сообщение
Я знаю их имена
и зачем этот сыр-бор, уже не модно обращаться к объекту по его имени?
в данном случае желательно еще какой-нибудь признак, конечно если имена объектов никак не похожи
0
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
29.10.2013, 23:52  [ТС] 12
Цитата Сообщение от cotseec Посмотреть сообщение
и зачем этот сыр-бор, уже не модно обращаться к объекту по его имени?
Грубо говоря у меня есть 10 эдитов, имена их знаю. Мне нужно сделать так, чтобы, когда в первый вводят число, некоторые другие стали невидимыми. То есть в edt1 поставили число, а edt3, edt4, edt7, edt9, edt10 - стали не видимыми и всё это в коде
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
30.10.2013, 00:13 13
Цитата Сообщение от Digetix Посмотреть сообщение
Могу отличить. Я знаю их имена
Это неудобно. Проверка имен это куча if then else. Если есть несколько эдитов, про которые заранее известно что какие-то их свойства надо одновременно менять, то можно присвоить их свойству Tag некое отличное от 0 значение и тогда проверка будет:
Delphi
1
2
3
for i:=0 to Components.Count -1 do
  if (Components[i] is TEdit) and (TEdit(Components[i]).Tag = 111)
  then TEdit(Components[i]).Enabled:=False;
0
angstrom
30.10.2013, 00:22 14
У ТС наоборот
Delphi
1
2
3
4
  for I := 0 to Components.Count - 1 do
    if (Components[I] is TEdit) and (TEdit(Components[I]).Tag in [1..10) then
      TEdit(Components[I]).Enabled := False;
  (Sender as TEdit).Enabled := True;
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
30.10.2013, 00:39  [ТС] 15
Спасибо, за примеры, но они не работают. Сейчас у меня работает вот так
Delphi
1
2
3
4
5
6
7
procedure TForm1.sEdit10Change(Sender: TObject);
 
begin
  sEdit11.Visible := True;
  sEdit12.Visible := True;
  sEdit13.Visible := True;
end;
0
angstrom
30.10.2013, 00:41 16
Чтобы примеры работали, нужно всем Edit-ам назначить один обработчик события OnChange.
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
30.10.2013, 01:11  [ТС] 17
Цитата Сообщение от angstrom Посмотреть сообщение
нужно всем Edit-ам назначить один обработчик события OnChange.
Всё равно не работает
0
angstrom
30.10.2013, 01:18 18
Не смеши.
106 / 106 / 1
Регистрация: 09.04.2012
Сообщений: 655
30.10.2013, 01:27  [ТС] 19
Чем?
0
angstrom
30.10.2013, 01:36 20
1. Назначить всем нужным Edit-ам свойство Tag по-возрастающей, от 1 до 10.
2. Назначить всем нужным Edit-ам один обработчик OnChange, в который вписать код проверки.
30.10.2013, 01:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2013, 01:36
Помогаю со студенческими работами здесь

Как применить функцию к нескольким элементам
Добрый день! Подскажите как оптимизировать код. Есть несколько списков html <p...

Присвоить конкретное значение нескольким элементам массива
Люди высшего разума, помогите Билдерщику. Можно-ли мгновенно присвоить конкретное значение...

Установка отбора по типу булево по нескольким элементам
Такая проблема, нужно установить отбор по двум элементам типа булево, это чисто реквизиты формы,...

Задать свойство всем элементам с id r1, r2, r3
Здравствуйте! На веб странице есть n элементов с id r1, r2 ... rn (n - это условное число, оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru