.net Winforms扩展控件属性

.net Winforms扩展控件属性,.net,winforms,.net-3.5,constructor,controls,.net,Winforms,.net 3.5,Constructor,Controls,我正在扩展Winforms标签控件。(自定义标签)。定义如下: public class CustomLabel: Label public CustomLabel():base() { } 我想更改标签的默认文本。总是CustomLabel1,CustomLabel2,等等 我在构造函数中尝试了base.Text=…和this.Text=…。还尝试: [DefaultValue(typeof(string), "MyDesiredText")] public ove

我正在扩展Winforms标签控件。(自定义标签)。定义如下:

public class CustomLabel: Label  
public CustomLabel():base()  
  {  

  }  
我想更改标签的默认文本。总是
CustomLabel1
CustomLabel2
,等等
我在构造函数中尝试了
base.Text=…
this.Text=…
。还尝试:

[DefaultValue(typeof(string), "MyDesiredText")]
public override string Text
{
    get
    {
        return base.Text;
    }
    set
    {
        base.Text = value;
    }
}
但是没有运气。

还有一件事:Autosize属性似乎没有按预期工作,并且提供的空间比第一次查看自定义标签控件所需的空间少了1个字符。例如,默认文本为:
CustomLabel1
,但我仅在将控件拖动到表单时看到
CustomLabel
。如果我更改文本,Autosize属性将正确显示整个文本。

真正的修复需要替换控件的设计器。这很难做到,System.Design.dll中的LabelDesigner类是内部的,因此您无法继承它。这是一种令人讨厌的方式:

using System;
using System.Windows.Forms;

class CustomLabel : Label {
    public override string Text {
        get { return base.Text; }
        set {
            if (this.DesignMode && value.StartsWith("customLabel")) {
                value = DateTime.Now.ToString();   // whatever you want here
            }
            base.Text = value;
        }
    }
}

类CustomLabel:Label{public new string Text{get…set…}