代码之家  ›  专栏  ›  技术社区  ›  Vincent McNabb

如何让C设计器知道C中填充或其他对象/结构的默认属性#

  •  8
  • Vincent McNabb  · 技术社区  · 14 年前

    当属性不是 defaultValue()支持的类型之一时,如何告诉设计器该属性的默认值?例如,A padding 或A font

    通常,当您使用Windows窗体控件时,默认值将在“属性”窗口中以普通字体显示,更改的(非默认)值将以粗体显示。例如

    在此示例中, showAddress的默认值为 is false and the default value of showName is true 。这种效果是通过以下方式实现的:

    [defaultvalue(false)]
    公共bool showaddress{
    获取返回mshowaddress;
    集合{
    mshowaddress=值;
    无效();
    }
    }
    
    [默认值(真)]
    公共bool showname…}
    < /代码> 
    
    

    但是,当我尝试为padding做一些事情时,我不幸失败了:

    [defaultvalue(new padding(2))]
    公共填充labelpadding…}
    < /代码> 
    
    

    哪一个当然不会编译。

    我到底该怎么做?,或者Font.

    通常,当您使用Windows窗体控件时,默认值将在“属性”窗口中以普通字体显示,更改的(非默认)值将以粗体显示。例如。

    Image of properties windows with non-default values in bold

    在此示例中,默认值为ShowAddressfalse默认值为ShowNametrue. 这种效果是通过以下方式实现的:

    [DefaultValue(false)]
    public bool ShowAddress {
      get { return mShowAddress; }
      set { 
        mShowAddress = value; 
        Invalidate();
      }
    }
    
    [DefaultValue(true)]
    public bool ShowName { ... }
    

    但是,当我试图为衬垫,我惨遭失败:

    [DefaultValue(new Padding(2))]
    public Padding LabelPadding { ... }
    

    当然不会编译。

    我到底该怎么做?

    2 回复  |  直到 10 年前
        1
  •  9
  •   Ben Voigt    14 年前

    试试这个:

    private static Padding DefaultLabelPadding = new Padding(2);
    private internalLabelPadding = DefaultLabelPadding;
    public Padding LabelPadding { get { return internalLabelPadding; } set { internalLabelPadding = value; LayoutNow(); } }
    
    // next comes the magic
    bool ShouldSerializeLabelPadding() { return LabelPadding != DefaultLabelPadding; }
    

    属性浏览器查找名为 ShouldSerializeXYZ 对于每个财产 XYZ . 无论何时 是否应进行细菌分离 返回false,它在代码生成期间不写入任何内容。

    编辑:文档:

        2
  •  20
  •   ryantm    10 年前

    试试这个:

    [DefaultValue( typeof( Padding ), "2, 2, 2, 2" )]
    public Padding LabelPadding
    {
        get { return _labelPadding; }
        set { _labelPadding = value; }
    }