gpt4 book ai didi

.Net Control.Tag - 常见和不寻常的用途

转载 作者:行者123 更新时间:2023-11-30 23:51:45 24 4
gpt4 key购买 nike

随着我的程序不断发展壮大,我发现我正在使用 Control.Tag越来越多。我不太确定微软为什么把它放在那里,但我觉得它很有用。

我想知道:他们最初的目的是什么?什么被认为是可以接受的,什么被认为是禁忌?

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

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

例如,当我有一对后退/下一个按钮,我想在到达开始时禁用后退,到达结束时禁用下一个按钮,然后我将下一个按钮存储在前一个的标签中,和下一个标签中的上一个按钮。这样,我总是可以设置 ((Button)Tag).Enabled = true单击时(因为当您向后移动时,显然禁用的下一步按钮将变为启用状态,反之亦然)。

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

所以我很好奇:你认为 Tag 最常见的用途是什么?你用过或见过的标签更不寻常的应用是什么?您会考虑将链接对象(如在我的后退/下一个按钮示例中)存储为“hacky”吗?

有些人反对使用标签,认为它们是旧语言的残余。一个常见的提示是,最好简单地扩展一个控件,使其包含一个强类型对象,而不是在使用时需要强制转换的任意对象。你怎么看待这件事?

最佳答案

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

关于.Net Control.Tag - 常见和不寻常的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com