代码之家  ›  专栏  ›  技术社区  ›  AMissico

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

  •  0
  • AMissico  · 技术社区  · 16 年前

    我有IExtenderProvider的扩展组件,它扩展文本框以具有“选定颜色”。此颜色的默认值是“突出显示”。用户可以更改扩展器属性网格中的“默认选定颜色”。如果扩展文本框未定义“选定颜色”,则将使用指定的“默认删除颜色”值。

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

    如何将“reset”命令添加到扩展控件的属性网格值,然后将该扩展属性“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
    

    我不能使用以下内容,因为这是为了扩展程序属性上的“重置”。

    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 不是常量。)

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

    有什么建议吗?

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

    2 回复  |  直到 15 年前
        1
  •  0
  •   Kenneth Xu    15 年前

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

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

    通过添加控制参数来执行类似于shouldSerializeValue方法的操作。

        2
  •  0
  •   Fredrik Mörk    16 年前

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

    <DefaultValue(GetType(Color), "Highlight")>
    
    推荐文章