我有一个标签控件的自定义版本(使用用户控件构建)。在设计器中工作时,我想截取 Name 属性的设置(在属性面板中)并使用它来生成 Text 属性。也就是说,如果我在属性面板的 Name 属性中输入“lblFirstName”,我想立即看到 Text 属性设置为“First Name”。
解析 Name 属性不是问题;我能做到。
我试图重载/隐藏 Name 属性(因为不允许“覆盖”)以本质上将此“方面”添加到我们的自定义标签控件中,但它似乎在设计时没有命中 Shadowed 方法。如果通过代码进行操作,它会在运行时触发 Shadowed 方法。
关键是要避免重复工作,因为标签文本和标签名称本质上是相同的。唯一的区别是一个被格式化为对人类友好,另一个被格式化为对机器友好。
<System.ComponentModel.Browsable(True),
System.ComponentModel.ParenthesizePropertyName(),
System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)>
Public Shadows Property Name As String
Get
Return MyBase.Name
End Get
Set(value As String)
MyBase.Name = value
If Me.DesignMode Then
Me.Text = Humanize(value)
End If
Me.Invalidate()
End Set
End Property
这可能是选择正确属性的问题。我不知道。
相反,如果它是一个更简单的选择,我们可以允许设置 Text 属性来设置 Name 属性。我怀疑这会更容易,因为它还应该反映 Designer.vb 代码中的新名称,而不仅仅是标签的 Name 属性本身。