Полагаю, потому что, поскольку вы выполняете работу в конструкторе, код InitializeComponent
, автоматически сгенерированный конструктором, перезаписывает экземпляр элемента управления, поскольку он, скорее всего, вызывается после вашей инициализации.
Если класс является частью проекта, вы найдете его на панели инструментов;это означает, что вы можете просто перетащить новый элемент управления в форму вместо существующего - это то, что вы должны сделать.
Это гарантирует, что сгенерированное конструктором свойство имеет тип LabelBean
, ине просто Label
.
Также - вы должны рассмотреть вопрос об изменении Value
сеттера, как продемонстрировал WoLfulus (+1 там)
Обновление
В ответ на комментарийВы положили ответ WoLfulus - вот несколько альтернатив:
1) Если форма здесь является «умным» битом - рассмотрите возможность написания в ней вспомогательного метода и установки через него значения метки, используя свойство Tag
:
public void SetLabelBean(Label target, string value)
{
Label.Tag = value;
Label.Text = Transform(value);
}
public string GetLabelBean(Label target)
{
return target.Tag as string;
}
2) Продолжайте использовать свой подклассифицированный тип LabelBean
(добавляя его через конструктор, как я уже упоминал) - но используйте абстракцию, чтобы дать емудоступ к методу Transform
формы:
public interface ITransformProvider
{
string Transform(string);
}
Заставьте ваш класс формы реализовать этот интерфейс с помощью метода Transform
, к которому вы не обращаетесь.
Теперь в вашем классе LabelBean
:
public ITransformProvider Transformer
{
get{
//searches up the control hierarchy to find the first ITransformProvider.
//should be the form, but also allows you to use your own container controls
//to change within the form. The algorithm could be improved by caching the
//result, invalidating it if the control is moved to another container of course.
var parent = Parent;
ITransformProvider provider = parent as ITransformProvider;
while(provider == null){
parent = parent.Parent;
provider = parent as ITransformProvider;
}
return provider;
}
}
иНаконец, используя немного измененный код WoLfulus, вы можете сделать это:
public string Value
{
get
{
return value;
}
set
{
this.value = value;
var transformer = Transformer;
if(transformer != null) this.Text = transformer.Transform(value);
}
}
Это, я думаю, решит ваши проблемы с этим ответом.