Расширьте System.Windows.Forms.Button и измените текст по умолчанию в c # - PullRequest
4 голосов
/ 29 марта 2012

Я создал пользовательскую кнопку управления, расширив класс 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")

    }

}

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Скрыть свойство 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
{
   //...
}
0 голосов
/ 29 марта 2012

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

    public override string Text
    {
        get
        {
            return "Consumables";
        }
        set
        {
        }
    }
0 голосов
/ 29 марта 2012

Для изменения необходимо переопределить свойство Text в производном классе.

public override string Text { get; set; }
...