Как установить значения по умолчанию для свойства времени разработки? - PullRequest
6 голосов
/ 16 марта 2012

Согласно MSDN (http://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize.aspx), есть примечание о Label 's AutoSize свойство:

При добавлении в форму с помощью конструктора значение по умолчанию равно trueПри создании экземпляра из кода значение по умолчанию равно false.

Вопрос: как я могу переопределить элемент управления Label и установить его свойство *1013* время разработки значение по умолчанию 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;
        }
    }
}

Ответы [ 3 ]

7 голосов
/ 16 марта 2012

Просто используйте наследование. Вы должны будете использовать свой собственный ярлык вместо системного.

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 переопределяет ваше значение по умолчанию.

4 голосов
/ 17 марта 2012

Элемент управления Label имеет атрибут:

[ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]

, который вызывает странную проблему AutoSize.

Я могу отключить его следующим образом:

[ToolboxItem(true)]
class MyLabel : Label
{
}
3 голосов
/ 16 марта 2012

См. DefaultValueAttribute

Примерно так:

public class MyLabel : Label
{
    [System.ComponentModel.DefaultValue(false)]
    public override bool AutoSize
    {
        get
        {
            return base.AutoSize;
        }
        set
        {
            base.AutoSize = value;
        }
    }
}

РЕДАКТИРОВАТЬ: Это не работает, как ожидалось. Ответ Тунга правильный. ... Снова неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...