Поскольку моя программа растет и растет, я обнаружил, что я использую Control.Tag
все больше и больше. Я не совсем уверен, почему Microsoft поместил это там, но я нахожу это весьма полезным.
Меня интересует: какова была их первоначальная цель? Что считается приемлемым, а что считается табу?
Согласно MSDN, Control.Tag
"Получает или задает объект, содержащий данные об элементе управления."
В моем приложении календаря я храню фактический объект Appointment
, который представляет AppointmentControl
. Я подозреваю, что это предполагаемое использование, и пример на MSDN, кажется, подтверждает это, однако я также делаю некоторые более необычные вещи.
Например, когда у меня есть пара кнопок «назад / следующая» и я хочу, чтобы кнопка «Назад» была отключена, когда мы дойдем до начала, и рядом с ней, которая будет отключена, когда мы дойдем до конца, тогда я сохраню следующую кнопку в теге предыдущая и предыдущая кнопка в теге следующего. Таким образом, я всегда могу установить ((Button)Tag).Enabled = true
по щелчку (потому что, когда вы вернетесь назад, станет ясно, что отключенная следующая кнопка станет активной, и наоборот).
Кроме того, мой календарь состоит из (визуально) двумерного массива панелей. Я сохраняю DateTime
, которому соответствует каждая панель в Panel.Tag
, и когда пользователь увеличивает масштаб, чтобы увидеть временные интервалы в дне, панели, которые составляют каждый временной интервал, имеют в своем теге интервал времени, который представляет время начала слота.
Так что мне любопытно: Как вы думаете, что является наиболее распространенным использованием Tag? Какое более необычное применение Tag вы использовали или видели? Считаете ли вы хранение связанного объекта (как в моем примере кнопки назад / далее) «хакерским»?
Некоторые люди выступают против использования тегов, предполагая, что они являются остатками старых языков. Распространенная жалоба заключается в том, что лучше просто расширить элемент управления, чтобы он содержал строго типизированный объект, а не что-то произвольное, которое необходимо приводить при использовании. Что вы думаете об этом?