Расширьте System.Windows.Forms.Button и измените текст по умолчанию в С#

Я создал пользовательскую кнопку управления, расширив класс System.Windows.Forms.Button.

Я установил значения по умолчанию .Text .Width и .Height в конструкторе нового класса.

Когда я бросаю этот элемент управления на форму, среда IDE достаточно умна, чтобы обращать внимание на ширину и высоту, указанные в конструкторе, и назначать эти свойства новой создаваемой кнопке, но игнорирует свойство Text и назначает .Text для кнопка должна быть "ucButtonConsumables1"

Есть ли способ установить для .Text значение по умолчанию по моему выбору?

public partial class ucButtonConsumables : System.Windows.Forms.Button {
    public ucButtonConsumables() {

        this.Text = "Consumables";                   
        this.Width = 184;
        this.Height = 23;

        this.Click += new EventHandler(ucButtonConsumables_Click);

    }

    void ucButtonConsumables_Click(object sender, EventArgs e) {

        MessageBox.Show("Button Clicked")

    }

}

person timothy    schedule 29.03.2012    source источник
comment
Вы запустили программу и проверили, соответствует ли текст тому, что вы имели в виду? я чувствую, что вы проверяете это в дизайнере, не должно быть того случая, когда вы запускаете его   -  person V4Vendetta    schedule 29.03.2012
comment
Вы пытаетесь бороться с дизайнером за кнопку. Победить в этом бою непросто, вы пытаетесь сделать что-то очень необычное. Нет особого смысла давать каждой кнопке один и тот же текст.   -  person Hans Passant    schedule 29.03.2012
comment
Да, я определенно борюсь с дизайнером. Дизайнер назначает элементу управления имя и хочет, чтобы свойство .Text было таким же.   -  person timothy    schedule 05.04.2012


Ответы (3)


Скрыть свойство Text из сериализации конструктора:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override string Text
{
    get { return base.Text; }
    set { base.Text = value; }
}

Или создайте конструктор со значениями по умолчанию:

public class ConsumablesButtonDesigner : System.Windows.Forms.Design.ControlDesigner
{
    public override void OnSetComponentDefaults()
    {
        base.OnSetComponentDefaults();
        Control.Text = "Consumables";
    }
}

И предоставьте этот дизайнер вашей кнопке:

[Designer(typeof(ConsumablesButtonDesigner))]
public class ucButtonConsumables : Button
{
   //...
}
person Sergey Berezovskiy    schedule 29.03.2012
comment
Первый вариант требует компиляции для обновления текста кнопки по умолчанию. - person Sergey Berezovskiy; 29.03.2012
comment
Второй метод выше работает очень хорошо. Первый метод, включая чистую перестройку и т. Д., У меня не сработал, но, возможно, сработал бы с настойчивостью. - person timothy; 05.04.2012
comment
@timothy для работы первого метода вам нужно скомпилировать проект. После компиляции текст конструктора по умолчанию будет заменен вашим - person Sergey Berezovskiy; 05.04.2012

Вы должны переопределить свойство Text в производном классе, чтобы изменить его.

public override string Text { get; set; }
person Bilal Hashmi    schedule 29.03.2012
comment
При простом переопределении свойства значение не будет установлено. Когда элемент управления загружен, свойство Text будет сброшено. - person Prakash; 29.03.2012

Да, это невозможно сделать в конструкторе. Если вы уверены, что значение больше не изменится, сделайте так. Переопределение свойства Text и возврат константы.

    public override string Text
    {
        get
        {
            return "Consumables";
        }
        set
        {
        }
    }
person Prakash    schedule 29.03.2012