将“重置”命令添加到属性网格中控件的扩展属性

时间:2009-09-14 07:34:27

标签: .net winforms design-time

我有一个IExtenderProvider的Extender组件,它将TextBox扩展为具有“选定颜色”。此颜色的默认值为“突出显示”。用户可以在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不是常数。)

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

有什么建议吗?

请注意,我不会在上面的代码片段中使用Color,因为它会使我想要说明的内容变得混乱。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

通过添加控制参数,对ShouldSerializeValue方法执行类似的操作。