Итак, вот окончательный ответ:
Согласно предложению Ганса, для этого требовался ControlDesigner. Я создал простой дизайнер, который будет взаимодействовать с некоторыми внутренними свойствами, и я заставил его работать. Но вот в чем подвох: это что-то вроде хака. Кажется, не существует ни одного поля со значением, которое я ищу, поэтому мне пришлось сделать .ToString()
для объекта, а затем проанализировать первый раздел. Я подумал, что это примерно так же чисто, как и собирается.
public class MyControlDesigner : ControlDesigner
{
public MyControlDesigner()
{
}
public override void InitializeNewComponent(IDictionary defaultValues)
{
base.InitializeNewComponent(defaultValues);
MyControl control1 = this.Component as MyControl;
control1.LabelText = control1.ToString().Split(" ".ToCharArray())[0];
}
}
Затем в верхней части MyControl я просто добавил новый атрибут:
[DesignerAttribute(typeof(MyControlDesigner))]
public partial class MyControl : UserControl
{
...
// Using the property "Text" Causes Visual Studio to crash!!!
public string LabelText
{
get { return label1.Text; }
set { label1.Text = value; }
}
...
}
Как видите, это было не очень сложно, но это немного хакерство. Элемент управления заблокировал IDE, когда я попытался переопределить «Текст». Не знаю почему, но когда я назвал его «LabelText», он работал отлично.