Текст UserControl исчезает в конструкторе после компиляции - PullRequest
2 голосов
/ 26 июня 2011

У меня самое странное, что происходит в моем решении. У меня есть кнопка, которую я сделал на заказ. Он наследует UserControl, и его текст представлен в виде метки внутри этого элемента управления.

Естественно, я хотел, чтобы текст кнопки был переопределен, чтобы установить текст метки:

Либо,

    /// <summary>
    /// Gets or sets the text that appears in the button
    /// </summary>
    [Category("Appearance"), Description("Gets or sets the text on the button.")]
    [Browsable(true)]
    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            base.Text = value;
            labelButtonText.Text = value;
        }
    }

Или

    /// <summary>
    /// Gets or sets the text that appears in the button
    /// </summary>
    [Category("Appearance"), Description("Gets or sets the text on the button.")]
    [Browsable(true)]
    public override string Text
    {
        get
        {
            return labelButtonText.Text ;
        }
        set
        {
            labelButtonText.Text = value;
        }
    }

Независимо от метода, когда я использую эту кнопку в другом UserControls / Forms, текст, который я явно вставил в конструктор, исчезает после компиляции.

Я проверил в файле "Button.designer.cs", и нет никакого назначения текста пустому или пустому ни для UserControl, ни для Label.

РЕДАКТИРОВАТЬ : Более того, когда я устанавливаю свойство Text в конструкторе, оно не устанавливается в файле * .designer.cs.

Заранее спасибо.

1 Ответ

4 голосов
/ 26 июня 2011

Да, это по замыслу.Свойство UserControl.Text выглядит следующим образом:

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Never)]
[Bindable(false)]
public override string Text
{
    get
    {
        return base.Text;
    }
    set
    {
        base.Text = value;
    }
}

Вы позаботились об атрибуте [Browsable], но не [DesignerSerializationVisibility].Скрытое - это то, что заставляет текст исчезать.Исправьте это, отменив все атрибуты:

    [Browsable(true)]
    [EditorBrowsable(EditorBrowsableState.Always)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Bindable(true)]
    public override string Text {
        // etc..
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...