Расширенные свойства элемента управления Winforms - PullRequest
0 голосов
/ 11 декабря 2010

Я расширяю элемент управления Winforms Label. (CustomLabel). Вот определение:

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 покажет весь текст правильно.

1 Ответ

2 голосов
/ 11 декабря 2010

Настоящее исправление требует замены дизайнера для элемента управления.Это довольно сложно сделать, класс LabelDesigner в System.Design.dll является внутренним, поэтому вы не можете его наследовать.Хакерский путь таков:

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