Многострочная строка в PropertyGrid - PullRequest
31 голосов
/ 25 сентября 2008

Есть ли встроенный редактор для многострочной строки в PropertyGrid.

Ответы [ 4 ]

50 голосов
/ 25 сентября 2008

Я обнаружил, что System.Design.dll имеет System.ComponentModel.Design.MultilineStringEditor, который можно использовать следующим образом:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}
2 голосов
/ 25 сентября 2008

Нет, вам нужно создать так называемый модальный редактор типов пользовательского интерфейса. Вам нужно будет создать класс, который наследуется от UITypeEditor. Это в основном форма, которая отображается при нажатии кнопки с многоточием справа от свойства, которое вы редактируете.

Единственным недостатком, который я обнаружил, было то, что мне нужно было украсить конкретное строковое свойство определенным атрибутом. Прошло много времени с тех пор, как я должен был это сделать. Я получил эту информацию из книги Криса Селлса "Программирование Windows Forms в C #"

Существует коммерческая сетка свойств под названием Smart PropertyGrid.NET от VisualHint.

0 голосов
/ 08 марта 2016

Нам нужно написать наш собственный редактор, чтобы получить многострочную поддержку в сетке свойств.

Вот класс текстового редактора клиента, реализованный из 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;
    }
}

Напишите свою сетку пользовательских свойств и примените этот атрибут редактора к свойству

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();
0 голосов
/ 25 сентября 2008

Да. Я не совсем помню, как он называется, но посмотрите в редакторе свойств Items что-то вроде ComboBox

Отредактировано: Начиная с @fryguybob, ComboBox.Items использует System.Windows.Forms.Design.ListControlStringCollectionEditor

...