Какова цель свойства 'Tag' компонентов VCL Delphi?

Из моего опыта, с Java Perf Profiling. Мои приложения, созданные с использованием Eclipselink, работают намного лучше, чем с Hibernate, как при вставке, так и при извлечении данных. Hibernate, однако, более широко используется и предоставляет больший форум для поддержки.

По этой причине я просто возьму Hibernate.

22
задан HMcG 6 November 2009 в 21:56
поделиться

6 ответов

Свойство "tag" существует как «грузовой контейнер» для всего, что вы можете с ним делать.

Часто он используется в обработчиках событий, когда у вас есть много похожих компонентов, совместно использующих один обработчик событий. Обработчик событий может найти своего вызывающего и затем запросить значение его тега, чтобы получить дополнительную информацию о том, над чем он должен действовать.

РЕДАКТИРОВАТЬ:

Пример: приложение калькулятора может пометить цифровые кнопки соответствующими номерами. .. глупый и неполный пример, но идею вы поняли. Затем обработчик событий может вытащить число, которое нужно добавить в дисплей и аккумулятор, прямо из тега, вместо того, чтобы выяснять, какая кнопка для чего предназначена.

36
ответ дан 29 November 2019 в 03:40
поделиться

Это здорово! Халява. Я все время использую его для хранения одной дополнительной информации, связанной с объектом.

Часто я сохраняю указатель на связанную структуру данных, а иногда целое число, которое может быть индексом в каком-то другом массиве.

Вы можете использовать его как счетчик для количества обращений к объекту или чего-то еще.

Единственный недостаток - если ваша программа использует много памяти и у вас есть миллионы объектов, эти 4 байта для каждого тега складываются, особенно если вы его не используете. В этом случае для наиболее распространенного типа объекта вы можете создать свою собственную версию без тега.

3
ответ дан 29 November 2019 в 03:40
поделиться

Как уже говорили другие, это место, куда можно положить что угодно. Обычно это удобно при связывании двух объектов с помощью ссылки на объект или указателя. Размер тега идеально подходит для размещения указателя, поэтому, если вам нужно, скажем, привязать объект к элементу в списке, это становится довольно просто.

4
ответ дан 29 November 2019 в 03:40
поделиться

Это место, где можно добавить часть информации к любому компоненту, даже если у вас нет источника для этого компонента. Его следует использовать осторожно, потому что вы можете использовать его только для одной цели для каждого компонента. По этой причине библиотеки никогда не должны его использовать.

11
ответ дан 29 November 2019 в 03:40
поделиться

Также его можно использовать для целей группировки, например, вы хотите получить доступ ко всем компонентам с определенным значением тега, независимо от типа компонента.

3
ответ дан 29 November 2019 в 03:40
поделиться

У вас есть 2 кнопки на вашей форме, на одной вы устанавливаете Tag = 1, а другую Tag = 2. Теперь вы назначаете одно и то же событие OnClick обеим кнопкам и пишете код следующим образом:

procedure TForm28.Button1Click(Sender: TObject);
begin
  case (Sender as TButton).Tag of
   1: Caption := 'you pressed button 1';
   2: Caption := 'you pressed button 2';
  end;
end;

или более compact:

procedure TForm28.Button1Click(Sender: TObject);
begin
  Caption := 'you pressed button ' + IntToStr((Sender as TButton).Tag);
end;

По сути, тег позволяет определить, какой элемент управления вызвал событие. Подумайте, есть ли у вас форма с динамически создаваемыми кнопками ... список с пользователями из базы данных, и на каждой записи вы помещаете кнопку «Удалить пользователя». В этой ситуации вы можете ' Чтобы создать событие для каждой кнопки, вы создадите одно событие, которое будет назначено всем кнопкам ... и вы можете поместить в тег, например, идентификатор пользователя. Таким образом, когда вы реализуете событие для обработки всех кнопок, вы будете знать, какого пользователя удалить.

3
ответ дан 29 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: