Мне нужно иметь MaskedTextBox в ToolStrip, который не включен по умолчанию, поэтому я следовал советам, которые нашел в Интернете, и создал собственный элемент управления, который наследуется от ToolStripControlHost. То, что я создал, прекрасно работает, когда я запускаю приложение, но это действительно портит дизайнера. Под «испорченным» я подразумеваю, что пользовательский элемент управления (наряду с некоторыми другими) исчезает из ToolStrip. Кроме того, я больше не могу добавлять новые элементы управления в ToolStrip и не могу выбрать существующие элементы управления в ToolStrip для их редактирования.
Вот мой класс.
[DesignerCategory("code")]
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)]
public partial class ToolStripMaskedTextBox : ToolStripControlHost
{
public MaskedTextBox MaskedTextBox
{
get { return Control as MaskedTextBox; }
}
public ToolStripMaskedTextBox()
: base(CreateControlInstance()) { }
private static Control CreateControlInstance()
{
MaskedTextBox mtb = new MaskedTextBox();
mtb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
mtb.MinimumSize = new System.Drawing.Size(100, 16);
mtb.PasswordChar = '*';
return mtb;
}
}
Буду признателен за любую помощь в том, что я могу сделать неправильно, которая доставляет дизайнеру трудное время.
Дополнительная информация
Теперь, когда я открываю свой файл класса в Visual Studio, я получаю страницу предупреждения со следующей ошибкой:
Constructor on type 'System.Windows.Forms.ToolStripControlHost' not found.
Дополнительная информация 2
Проблема возникает только после построения решения. Я могу заставить дизайнер работать правильно, изменив файл Form.Designer.cs даже самым маленьким способом. Как добавление одного пробела. С этого момента дизайнер будет работать нормально. Пока я не построю решение. Затем дизайнер снова зависает. Ни один из элементов управления в форме не может быть отредактирован.