【问题标题】:Winforms Extended Control PropertiesWinforms 扩展控件属性
【发布时间】:2011-05-23 23:30:33
【问题描述】:

我正在扩展一个 Winforms 标签控件。 (自定义标签)。这是定义:

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 属性将正确显示整个文本。

【问题讨论】:

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


    【解决方案1】:

    真正的修复需要更换控件的设计器。这很难做到,System.Design.dll 中的 LabelDesigner 类是内部的,因此您无法继承它。 hacky方法是这样的:

    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 : 标签 { public new string Text { get ... set ... } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多