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