c# – 如何设置设计时属性默认值?

根据MSDN( http://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize.aspx),有关于Label的AutoSize属性的说明:

When added to a form using the designer,the default value is true. When instantiated from code,the default value is false.

问题是:如何覆盖Label控件并将其AutoSize属性的设计时默认值设置为false?

(更新)

这不起作用:

class MyLabel : Label
{
    const bool defaultAutoSize = false;

    public MyLabel()
    {
        AutoSize = defaultAutoSize;
    }

    [DefaultValue(defaultAutoSize)]
    public override bool AutoSize
    {
        get
        {
            return base.AutoSize;
        }
        set
        {
            base.AutoSize = value;
        }
    }
}

解决方法

只需使用继承.但是,您必须使用自定义标签而不是系统标签.
public class MyLabel:Label
{
    public MyLabel():base()
    {
        base.AutoSize = false;
    }
}

您可以将其直接放入代码中并修改代码,如下所示.或者,您可以将此类放入其自己的库中,然后您可以将其加载到工具箱中并像使用任何其他组件一样使用.

为了在工具箱中工作,您似乎需要覆盖InitLayout,如下所示,并向AutoSize属性添加一个属性,以便它不会序列化到设计器中:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    [DefaultValue(false)]
    public override bool AutoSize
    {
        get
        {
            return base.AutoSize;
        }
        set
        {
            base.AutoSize = value;
        }
    }

    protected override void InitLayout()
    {
        base.InitLayout();
        base.AutoSize = false;
    }

如果您没有使用工具箱,那么一旦将正常标签放到表单上,就需要进入[Form] .Designer.cs并找到并修改标签:

this.label1 = new MyLabel();// new System.Windows.Forms.Label();

//this.label1.AutoSize = true;

您必须删除预设的AutoSize属性,因为当您删除标签时,它会将其设置在设计器中,即使您将标签实例化更改为您的类型,手动AutoSize设置也将覆盖您的默认值

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...