Настраиваемое свойство пользовательского элемента управления теряет ценность при сборке

У меня есть UserControl с именем «UserControl1» с меткой внутри и настраиваемым свойством:

[Browsable(true)]
public new string Text
{
    get { return label1.Text; }
    set { label1.Text = value; }
}

public UserControl1()
{
    InitializeComponent();
}

Этот UserControl используется в форме с именем «Form1». В дизайнере появляется свойство, но когда я пишу текст и создаю приложение, текст очищается. Я вижу, свойство не записано в Form1.Designer.cs.

Если я изменю имя свойства на какое-нибудь другое слово, все в порядке .. Обратите внимание на ключевое слово «новое», чтобы переопределить базовую переменную ..

Я нашел похожий вопрос здесь Но решения нет.

Привет!

РЕДАКТИРОВАТЬ: жестко запрограммированного значения нет:

UserControl1.Designer.cs:

        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(64, 63);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(35, 13);
        this.label1.TabIndex = 0;
        // 
        // UserControl1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Controls.Add(this.label1);
        this.Name = "UserControl1";
        this.Size = new System.Drawing.Size(181, 136);
        this.ResumeLayout(false);
        this.PerformLayout();

Form1.Designer.cx:

        // 
        // userControl11
        // 
        this.userControl11.Location = new System.Drawing.Point(35, 43);
        this.userControl11.Name = "userControl11";
        this.userControl11.Size = new System.Drawing.Size(181, 136);
        this.userControl11.TabIndex = 0;
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(284, 262);
        this.Controls.Add(this.userControl11);
        this.Name = "Form1";
        this.Text = "Form1";
        this.ResumeLayout(false);

Чтобы воспроизвести проблему, просто создайте новое приложение формы Windows, создайте пользовательский элемент управления с меткой внутри и со свойством с именем «Текст».


person elecyb    schedule 07.07.2013    source источник
comment
Не могли бы вы прояснить это ...when I write some text and build the application the text is cleared...? Что это за код и где вы его разместили в своем классе?   -  person King King    schedule 08.07.2013
comment
Привет, я имею в виду, когда я пишу какую-то строку в представлении дизайнера .. Она появляется на ярлыке (в представлении конструктора), но когда я запускаю приложение (сборку), текст исчезает .. Соответствующий код должен появиться в форме Form1 .Designer.cs .. примерно так: this.userControl11.Text = asdf; Но нет..   -  person elecyb    schedule 09.07.2013


Ответы (2)


Попробуйте использовать override вместо new для свойства Text и включите атрибут DesignerSerializationVisibility:

[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
  get { return label1.Text; }
  set { label1.Text = value; }
}
person LarsTech    schedule 08.07.2013

Загляните внутрь InitializeComponent (). Скорее всего, это жесткое кодирование значения по умолчанию, когда вы помещаете элемент управления в область конструктора.

person apb    schedule 07.07.2013