Winforms扩展控件属性

时间:2010-12-11 15:41:30

标签: .net winforms .net-3.5 constructor controls

我正在扩展Winforms Label控件。 (CustomLabel)。这是定义:

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

  }  

我想更改标签的默认文字。它总是CustomLabel1CustomLabel2等。
我在构造函数中尝试了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属性将正确显示整个文本。

1 个答案:

答案 0 :(得分:2)

真正的修复需要替换控件的设计器。这很难做到,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;
        }
    }
}