.Net控件.Tag-常用和不常用

.Net控件.Tag-常用和不常用,.net,controls,.net,Controls,随着我的程序不断增长,我发现我使用的Control.Tag越来越多。我不太清楚微软为什么把它放在那里,但我发现它非常有用 我不禁要问:他们最初的目的是什么?什么是可以接受的,什么是禁忌 根据MSDN,Control.Tag“获取或设置包含控件数据的对象。” 在我的日历应用程序中,我存储了AppointmentControl表示的实际Appointment对象。我怀疑这是它的预期用途,MSDN上的示例似乎证实了这一点,但我也做了一些更不寻常的事情 例如,当我有一对“后退/下一步”按钮,并且我希望在

随着我的程序不断增长,我发现我使用的
Control.Tag
越来越多。我不太清楚微软为什么把它放在那里,但我发现它非常有用

我不禁要问:他们最初的目的是什么?什么是可以接受的,什么是禁忌

根据MSDN,
Control.Tag
“获取或设置包含控件数据的对象。”

在我的日历应用程序中,我存储了
AppointmentControl
表示的实际
Appointment
对象。我怀疑这是它的预期用途,MSDN上的示例似乎证实了这一点,但我也做了一些更不寻常的事情

例如,当我有一对“后退/下一步”按钮,并且我希望在到达起点时禁用“后退”,在到达终点时禁用“下一步”,则我将“下一步”按钮存储在“上一步”的标记中,将“上一步”按钮存储在“下一步”的标记中。这样,我总是可以在单击时设置
((按钮)标记).Enabled=true
(因为当您向后移动时,显然禁用的下一个按钮将变为启用,反之亦然)

此外,我的日历由(视觉上的)二维面板阵列组成。我将每个面板对应的
DateTime
存储在
panel.Tag
中,当用户放大查看一天中的时段时,组成每个时隙的面板在其标记中都有一个时间跨度,该时间跨度表示该时段的开始时间

所以我很好奇:你认为标签最常用的用法是什么?您使用过或见过的标签的一个更不寻常的应用是什么?您是否考虑将链接对象(如在我的Butk/Next按钮示例中)存储为“Haky”?


有些人反对使用标记,认为它们是旧语言的残余。一个常见的抱怨是,最好简单地扩展控件,使其包含强类型对象,而不是使用时需要强制转换的任意对象。您对此有何看法?

这来自VB6,它的控件也有一个标记属性。它很难替代类中的字段,因为标记的类型是Object,所以它不是类型安全的。使您的代码也难以阅读,因为它有一个非特定的名称。如果需要将其与控件关联,则使用继承。从控件类型派生类并添加所需的属性。或者在表单中添加一个字段