我有一個IExtenderProvider的Extender組件,它擴展了TextBox以具有「選定的顏色」。此顏色的默認值是「高亮」。用戶可以在擴展器的屬性網格中更改「默認選定的顏色」。如果沒有擴展的TextBox定義了「選定的顏色」,它將使用指定的「默認刪除的顏色」值。將「重置」命令添加到屬性網格中的控件的擴展屬性
如果程序員更改了文本框的「選定顏色」,我想在屬性網格中提供「重置」命令,將「選定顏色」重置爲「默認選定顏色」,如Extender組件中所定義。
如何向擴展控件的屬性網格值添加「reset」命令,然後將擴展屬性重置爲由擴展器提供的默認值?
我想允許用戶對擴展屬性右鍵單擊並選擇重置爲在擴展中定義的屬性恢復爲默認值。
(見Defining Default Values with the ShouldSerialize and Reset Methods在http://msdn.microsoft.com/en-us/library/53b8022e.aspx) 很明顯,這是行不通的。
Public Sub ResetGetMyProperty()
MyProperty = "Hello World!"
End Sub
而且我不能使用以下內容,因爲這是用於Extender屬性上的「重置」。
Public Sub ResetMyProperty()
MyProperty = "Hello World!"
End Sub
我不能使用DefaultValue
,如下圖所示,因爲它需要一個常數,它不是這種情況,因爲程序員可以改變默認值。
<DefaultValue("Hello World!")> _
Public Sub GetMyProperty(control As Control) As String
Return _extendees(control).MyProperty
End Sub
我需要這樣的東西<DefaultValue(Me.Property)>
因爲Me.Property是通過屬性網格由程序員指定的值。 (我不能這樣做,因爲Me.Property
不是一個常量。)
[澄清] 擴展器本身具有屬性。這些是任何擴展控件的默認值。如果程序員沒有爲特定擴展控件指定「覆蓋」值,那麼將使用默認值。作爲擴展器的作者,我默認爲一個特定的值,比如說「高亮」,但是,作爲擴展器的用戶,您需要默認爲「紅色」,您將不得不更改擴展器的屬性。現在任何未定義此擴展屬性的擴展控件都將使用「紅色」。然而,任何指定了值的控件都不能「重置」到這個「紅色」。 DefaultValue不適用。 (目前,設置默認設置的唯一方法是從設計器中刪除代碼。)
有什麼建議嗎?
請注意,我不在上面的代碼片段中使用Color,因爲它混淆了我想說明的內容。
我真的不明白你的問題。你能解釋一下嗎? – 2009-09-14 07:42:16