Есть ли встроенный редактор для многострочной строки в PropertyGrid
.
Многострочная строка в PropertyGrid
Ответ 1
Я обнаружил, что System.Design.dll
имеет System.ComponentModel.Design.MultilineStringEditor
, который можно использовать следующим образом:
public class Stuff
{
[Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
public string MultiLineProperty { get; set; }
}
Ответ 2
Нет, вам нужно будет создать то, что называется модальным редактором типа пользовательского интерфейса. Вам нужно создать класс, который наследуется от UITypeEditor. Это форма, которая отображается, когда вы нажимаете на кнопку с многоточием в правой части свойства, которое вы редактируете.
Единственный недостаток, который я нашел, заключался в том, что мне нужно было украсить конкретное свойство строки конкретным атрибутом. Прошло некоторое время с тех пор, как я должен был это сделать. Я получил эту информацию из книги Криса Продал под названием "Программирование Windows Forms в С#"
В VisualHint имеется коммерческий propertygrid, называемый Smart PropertyGrid.NET.
Ответ 3
Да. Я не совсем помню, как это называется, но посмотрите на редактор свойств Items для чего-то вроде ComboBox
Отредактировано: Начиная с @fryguybob, ComboBox.Items использует System.Windows.Forms.Design.ListControlStringCollectionEditor
Ответ 4
Нам нужно написать наш пользовательский редактор, чтобы получить многострочную поддержку в сетке свойств.
Вот класс текстового редактора клиента, реализованный из 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();