C#设计人员如何知道C#中的Padding或其他对象/结构的默认属性 [英] How does one have the C# designer know the default property for a Padding or other object/struct in C#

查看:200
本文介绍了C#设计人员如何知道C#中的Padding或其他对象/结构的默认属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

通常,当您使用Windows窗体控件时,默认值将在属性"窗口中以常规字体显示,而更改后的(非默认)值将以粗体显示.例如

>

在此示例中,ShowAddress的默认值是false,而ShowName的默认值是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 { ... }

当然不会编译.

在地球上我该怎么做?

解决方案

尝试一下:

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,它就不会在代码生成过程中写任何东西.

文档:

How does one tell the designer the default value of a Property when it is not one of the types supported by DefaultValue()? For instance, a Padding, or a Font.

Normally, when you use a Windows Forms control, the default values will be in a normal font in the Properties window, and changed (non-default) values will be in bold. E.g.

In this sample, the default value of ShowAddress is false and the default value of ShowName is true. This effect is achieved with the following:

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

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

However, when I tried to do something for Padding, I failed miserably:

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

Which of course won't compile.

How on Earth would I do this?

解决方案

Try this:

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

The property browser looks for a function named ShouldSerializeXYZ for each property XYZ. Whenever ShouldSerializeXYZ returns false, it doesn't write anything during code generation.

EDIT: documentation:

这篇关于C#设计人员如何知道C#中的Padding或其他对象/结构的默认属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆