vb.net关于control.tag的问题
Sub RecursionControl(ByVal control As Control, ByVal resize As Boolean) If control.HasChildren Then Dim c As Control For Each c In control.Controls RecursionControl(c, resize) Next End If If control IsNot Me Then With control If resize Then Dim scale As Single = Me.Width / Val(Me.Tag) Dim sp() As String = Split(.Tag, "|") '为什么会有坐标与尺寸的数据在里面? .Left = scale * Val(sp(0)) .Top = scale * Val(sp(1)) .Width = scale * Val(sp(2)) .Height = scale * Val(sp(3)) Else .Tag = .Left & "| " & .Top & "| " & .Width & "| " & .Height End If End With End If End Sub
Tag是个什么内涵都没有定义的东西,它只是随便定义一个object类型的属性而已,你可以把任何对象赋值给它。这就好像假设一个游客背一个书包,里边可能装了吃的,也可能装了杀人工具,是他自己装进去的。
因此你要全文搜索一下,看看哪里有给Tag赋值的语句,看懂这个逻辑流程(那里赋值和这里取值)。只能问你自己,别人无法告诉你。
在我们设计程序时,自然要尽可能使用“强类型”的模式来设计程序,尽可能不要设计这种费思量的垃圾属性。因为这种东西不但需要费几百倍的脑细胞来不断重温其流程,而且稍有不慎其中的数据就会在运行时不定哪一种数据情况下才崩溃在用户面前、让开发人员丢人现眼。
而如果我们使用强类型的设计,比如说我们的 MyShape 类型的图形控件定义了double类型的 Lat 和 Lng 属性,那么如果程序中某个地方有使它时犯下的错误代码,往往编译时期就能立刻检查出来,因为强类型系统就是有这个好处。可见,此时你不用什么Tag。
但是尽管如此,微软的控件仍然有万分之一的部分是使用了弱类型、甚至是运行时随意混用的属性,其中较常见的也就是Tag。
|