【问题标题】:How does one have the C# designer know the default property for a Padding or other object/struct in C#C# 设计人员如何知道 C# 中 Padding 或其他对象/结构的默认属性
【发布时间】:2011-03-21 09:26:00
【问题描述】:

当一个属性不是DefaultValue()支持的类型之一时,如何告诉设计者它的默认值?例如,PaddingFont

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

在此示例中,ShowAddress 的默认值为falseShowName 的默认值为true。这种效果是通过以下方式实现的:

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

[DefaultValue(true)]
public bool ShowName { ... }

但是,当我尝试为Padding 做点什么时,我惨败:

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

当然不会编译。

我该怎么做呢?

【问题讨论】:

    标签: c# winforms visual-studio-2008 attributes default-value


    【解决方案1】:

    试试这个:

    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; }
    

    属性浏览器为每个属性XYZ 查找名为ShouldSerializeXYZ 的函数。每当ShouldSerializeXYZ 返回 false 时,它​​不会在代码生成期间写入任何内容。

    编辑:文档:

    【讨论】:

    • 它似乎对我不起作用。使用 Visual C# 2008。在放入代码后,它将属性写入表单设计器,在将其设置回默认值后,并且从未取消属性窗口中的粗体。
    • 对不起,我的命名错误。我还添加了文档链接。
    • 完美!非常感谢:-)
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2020-11-24
      • 2018-11-15
      相关资源
      最近更新 更多