Многострочная строка в PropertyGrid
есть ли встроенный редактор для многострочной строки в PropertyGrid
.
4 ответов
Я нашел это System.Design.dll
и System.ComponentModel.Design.MultilineStringEditor
который можно использовать следующим образом:
public class Stuff
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string MultiLineProperty { get; set; }
}
нет, вам нужно будет создать так называемый модальный редактор типа пользовательского интерфейса. Вам нужно будет создать класс, который наследуется от UITypeEditor. Это в основном форма, которая отображается при нажатии на кнопку с многоточием в правой части редактируемого свойства.
единственным недостатком, который я нашел, было то, что мне нужно было украсить конкретное строковое свойство конкретным атрибутом. Мне давно не приходилось это делать. Я получил эту информацию из книги Криса Селлса под названием "Программирование Windows Forms на C#"
есть коммерческая недвижимость под названиемУмный PropertyGrid.NET по VisualHint.
да. Я не совсем помню, как это называется, но посмотрите на редактор свойств элементов для чего-то вроде ComboBox
отредактировано: As of @fryguybob, ComboBox.Предметы, использует систему.Окна.Формы.Дизайн.ListControlStringCollectionEditor
нам нужно написать наш пользовательский редактор, чтобы получить многострочную поддержку в сетке свойств.
вот класс текстового редактора клиента, реализованный из UITypeEditor
public class MultiLineTextEditor : UITypeEditor
{
private IWindowsFormsEditorService _editorService;
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
_editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
TextBox textEditorBox = new TextBox();
textEditorBox.Multiline = true;
textEditorBox.ScrollBars = ScrollBars.Vertical;
textEditorBox.Width = 250;
textEditorBox.Height = 150;
textEditorBox.BorderStyle = BorderStyle.None;
textEditorBox.AcceptsReturn = true;
textEditorBox.Text = value as string;
_editorService.DropDownControl(textEditorBox);
return textEditorBox.Text;
}
}
Write your custom property grid and apply this Editor attribute to the property
class CustomPropertyGrid
{
private string multiLineStr = string.Empty;
[Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
public string MultiLineStr
{
get { return multiLineStr; }
set { multiLineStr = value; }
}
}
в основной форме назначьте этот объект
propertyGrid1.SelectedObject = new CustomPropertyGrid();