.net 加入“;重置";控件的命令';属性网格中的扩展属性

.net 加入“;重置";控件的命令';属性网格中的扩展属性,.net,winforms,design-time,.net,Winforms,Design Time,我有一个IExtenderProvider的扩展程序组件,它扩展了一个文本框,使其具有“选定的颜色”。此颜色的默认值为“高光”。用户可以在扩展器的属性网格中更改“默认选定颜色”。如果扩展文本框未定义“选定颜色”,则它将使用指定的“默认已删除颜色”值 如果程序员更改了文本框的“选定颜色”,我想在属性网格中提供“重置”命令,将“选定颜色”重置为“默认选定颜色”,如Extender组件中定义的那样 如何将“reset”命令添加到扩展控件的属性网格值,然后将该扩展属性“reset”到扩展器提供的默认值?

我有一个IExtenderProvider的扩展程序组件,它扩展了一个文本框,使其具有“选定的颜色”。此颜色的默认值为“高光”。用户可以在扩展器的属性网格中更改“默认选定颜色”。如果扩展文本框未定义“选定颜色”,则它将使用指定的“默认已删除颜色”值

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

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

我希望允许用户右键单击扩展属性,然后选择重置,以将属性恢复到扩展程序中定义的默认值

(见附件) 显然,这是行不通的

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
_
作为字符串的公共子GetMyProperty(控件作为控件)
Return\u extendees(control).MyProperty
端接头
我需要类似于
的东西,因为Me.Property是程序员通过属性网格指定的值。(我不能这样做,因为
Me.Property
不是常数。)

[澄清] 扩展器本身具有属性。这些是任何扩展控件的默认值。如果程序员没有为特定的扩展控件指定“覆盖”值,那么将使用默认值。一、 作为扩展器的作者,默认为一个特定的值,比如说“highlight”,但是您,我的扩展器的用户,想要默认为“red”,您必须更改扩展器的属性。现在,任何未定义此扩展属性的扩展控件都将使用“红色”。但是,任何指定了值的控件…都不能“重置”为该“红色”。默认值不适用。(当前,设置默认值的唯一方法是从设计器中删除代码。)

有什么建议吗

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

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

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

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

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

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

我不太理解您的问题。你能再解释一下吗?正如问题中提到的,“Highlight”是一个常量。它不反映程序员指定为“默认选定颜色”的颜色。@Amissio:“默认选定颜色”是什么意思?“突出显示”将映射到当前由系统颜色定义的颜色(用户可以选择)。是的,但扩展器本身具有属性。这些是任何扩展控件的默认值。如果程序员没有为特定的扩展控件指定“覆盖”值,那么将使用默认值。一、 作为扩展器的作者,默认为一个特定的值,比如说“highlight”,但是如果我的扩展器的用户想要默认为“red”,则必须更改扩展器的属性。现在,任何未定义此颜色属性的扩展控件都将使用“红色”。然而,任何具有…的控件都不能“重置”为此“红色”。DefaultValue不适用。@AMissico:现在我明白了(我将“默认选定颜色”解释为系统定义的颜色)。谢谢您的讨论。我添加了我最后的评论作为对问题的“澄清”。你太棒了!有相关文档吗?没有关于扩展程序提供程序的特定文档。至少我没找到。但我想你已经知道对常规属性的重置支持了。对于扩展程序提供程序,为了让VS designer支持告诉您要重置哪个控件,本质上它必须将该控件传递给您。我就是这样算出签名的。