Многострочная строка в 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();