Пользовательский элемент управления пользователя теряет значение при сборке
У меня есть UserControl с именем "UserControl1" с меткой внутри и пользовательским свойством:
[Browsable(true)]
public new string Text
{
get { return label1.Text; }
set { label1.Text = value; }
}
public UserControl1()
{
InitializeComponent();
}
Этот UserControl используется в форме с именем "Form1". В конструкторе появляется свойство, но когда я пишу какой-то текст и строю приложение, текст очищается. Я вижу, что свойство не записано в Form1.Designer.cs.
Если я изменю имя свойства на какое-то другое слово, все будет в порядке.. Обратите внимание на ключевое слово "new", чтобы переопределить базовую переменную.
Я нашел подобный вопрос здесь, но нет никакого решения.
Привет!
РЕДАКТИРОВАТЬ: Там нет жестко закодированное значение:
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, создайте пользовательский элемент управления с меткой внутри и свойством с именем "Текст".
2 ответа
Попробуйте использовать override
вместо new
для свойства Text и включают DesignerSerializationVisibility
атрибут:
[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
get { return label1.Text; }
set { label1.Text = value; }
}
Заглянуть внутрь InitializeComponent(). Скорее всего, это жесткое кодирование значения по умолчанию, когда вы помещаете элемент управления в область конструктора.