我有一個自定義版本的標籤控件(使用用戶控件構建)。在設計師工作時,我想攔截Name屬性的設置(在屬性面板中)並使用它來生成Text屬性。也就是說,如果我在屬性面板的Name屬性中輸入「lblFirstName」,我想立即看到Text屬性設置爲「First Name」。自定義控件上的攔截/覆蓋Name屬性?
解析名稱屬性不是問題;我可以做到這一點。
我試圖重載/影射Name屬性(因爲「Overrides」是不允許的),基本上將這個「aspect」添加到我們的自定義標籤控件中,但它在設計時似乎沒有擊中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屬性本身。
這使我走上了正確的道路。謝謝。 – Mario
@Mario很高興它幫助,謝謝。 –