У меня есть приложение для Windows, использующее элемент управления .NET PropertyGrid. Можно ли изменить тип элемента управления, который используется для поля значения свойства?
Я хотел бы иметь возможность использовать RichTextBox, чтобы обеспечить лучшее форматирование входного значения. Можно ли это сделать без создания специального класса редактора?





Я думаю, что вам нужны дескрипторы пользовательского типа. Вы можете немного прочитать и начать здесь: http://www.codeproject.com/KB/miscctrl/bending_property.aspx
Я не уверен, что у вас есть какой-либо элемент управления, который вы хотите, но эта статья заставила меня начать работу с сетками свойств.
Вы можете указать, будет ли PropertyGrid отображать простое поле редактирования, стрелку раскрывающегося списка или элемент управления с многоточием.
Найдите EditorAttribute и следуйте за ним оттуда. У меня где-то был образец; Попробую откопать.
Чтобы добавить собственное настраиваемое редактирование, когда пользователь выбирает значение сетки свойств, вам необходимо реализовать класс, производный от UITypeEditor. Затем у вас есть выбор: показать только небольшое всплывающее окно под областью свойств или полноразмерное диалоговое окно.
Что приятно, так это то, что вы можете повторно использовать существующие реализации. Итак, чтобы добавить возможность многострочного редактирования строки, вы просто делаете это ...
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public override string Text
{
get { return _string; }
set { _string = value; }
}
Еще одна приятная вещь, которую они вам предоставляют, - это возможность редактировать массив строк ...
[Editor("System.Windows.Forms.Design.StringArrayEditor,
System.Design, Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a",
typeof(UITypeEditor))]
public string[] Lines
{
get { return _lines; }
set { _lines = value; }
}
Спасибо. Это было прекрасно! Одно дополнение вместо typeof (UITypeEditor) вы можете использовать "System.Drawing.Design.UITypeEditor, System.Drawing, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a" обнаружил, что после некоторых ошибок компиляции