2009-09-14 19 views
0

我有一個IExtenderProvider的Extender組件,它擴展了TextBox以具有「選定的顏色」。此顏色的默認值是「高亮」。用戶可以在擴展器的屬性網格中更改「默認選定的顏色」。如果沒有擴展的TextBox定義了「選定的顏色」,它將使用指定的「默認刪除的顏色」值。將「重置」命令添加到屬性網格中的控件的擴展屬性

如果程序員更改了文本框的「選定顏色」,我想在屬性網格中提供「重置」命令,將「選定顏色」重置爲「默認選定顏色」,如Extender組件中所定義。

如何向擴展控件的屬性網格值添加「reset」命令,然後將擴展屬性重置爲由擴展器提供的默認值?

我想允許用戶對擴展屬性右鍵單擊並選擇重置爲在擴展中定義的屬性恢復爲默認值。

(見Defining Default Values with the ShouldSerialize and Reset Methodshttp://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,因爲它混淆了我想說明的內容。

+0

我真的不明白你的問題。你能解釋一下嗎? – 2009-09-14 07:42:16

回答

0

的擴展屬性復位方法簽名是:

Public Sub ResetMyProperty(control As Control) 
    MyProperty = "Hello World!" 
End Sub 

通過添加控制參數來執行與ShouldSerializeValue方法類似的操作。

+0

你真棒!有這方面的文件嗎? – AMissico 2010-02-19 14:32:02

+0

對此,沒有針對擴展器提供商的具體文檔。至少我沒有找到任何。但我想你已經知道了對普通財產的重置支持。如果是擴展提供商,爲了讓VS設計人員支持告訴您哪個控件要重置,本質上它必須將控制權交給您。我就是這樣想出來的。 – 2010-03-02 02:17:05

0

可以使用DefaultValue屬性,使用要作爲默認值系統顏色設置的名稱:

<DefaultValue(GetType(Color), "Highlight")> 
+0

正如問題所述,「突出顯示」是一個常數。它不反映程序員指定爲「默認選擇的顏色」的顏色。 – AMissico 2009-09-14 08:44:25

+0

@AMISSico:你說的「默認選擇的顏色」是什麼意思? 「高光」將映射到系統顏色(可由用戶選擇)當前定義的顏色。 – 2009-09-14 08:56:56

+0

是的,但擴展器本身具有屬性。這些是任何擴展控件的默認值。如果程序員沒有爲特定擴展控件指定「覆蓋」值,那麼將使用默認值。作爲擴展器的作者,我默認爲一個特定的值,比如說「高亮」,但是我的擴展器的用戶希望默認爲「紅色」,您將不得不更改擴展器的屬性。現在任何未定義此顏色屬性的擴展控件都將使用「紅色」。然而,任何具有...的控制都不能「復位」到這個「紅色」。 DefaultValue不適用。 – AMissico 2009-09-14 10:34:55