0

我有一个 IExtenderProvider 的扩展器组件,它扩展了一个 TextBox 以具有“选定的颜色”。此颜色的默认值为“highlight”。用户可以在扩展器的属性网格中更改“默认选择的颜色”。如果没有扩展 TextBox 定义了“选定颜色”,它将使用指定的“默认删除颜色”值。

如果程序员更改了 TextBox 的“选定颜色”,我想在属性网格中提供“重置”命令,将“选定颜色”重置为“默认选定颜色”,如 Extender 组件中定义的那样。

如何将“重置”命令添加到扩展控件的属性网格值,然后将该扩展属性“重置”为扩展器提供的默认值?

我希望允许用户右键单击扩展属性并选择重置以将属性恢复为其在扩展程序中定义的默认值。

(请参阅http://msdn.microsoft.com/en-us/library/53b8022e.aspx上的使用 ShouldSerialize 和重置方法定义默认值)显然,这不会起作用。

Public Sub ResetGetMyProperty()
    MyProperty = "Hello World!"
End Sub

而且我不能使用以下内容,因为这是用于扩展器属性的“重置”。

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它不是一个常数。)

[澄清] 扩展器本身具有属性。这些是任何扩展控件的默认值。如果程序员没有为特定的扩展控件指定“覆盖”值,则将使用默认值。我作为扩展器的作者,默认为特定值,例如“突出显示”,但是您,我的扩展器的用户,想要默认为“红色”,您将不得不更改扩展器的属性。现在任何未定义此扩展属性的扩展控件都将使用“红色”。然而,任何指定了值的控件......都不能“重置”到这个“红色”。默认值不适用。(目前,设置默认值的唯一方法是从设计器中删除代码。)

有什么建议么?

请注意,我没有在上面的代码片段中使用颜色,因为它会混淆我试图说明的内容。

4

2 回答 2

0

可以使用该DefaultValue属性,使用您想要的系统颜色设置的名称作为默认值:

<DefaultValue(GetType(Color), "Highlight")>
于 2009-09-14T08:22:21.157 回答
0

扩展属性的重置方法签名是:

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

通过添加控制参数来做与 ShouldSerializeValue 方法类似的事情。

于 2010-02-19T04:40:04.370 回答