Вопрос

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

Это было полезно?

Решение

Я обнаружил, что 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

Отредактированный:Начиная с @fryguybob, ComboBox.Items использует Систему.Windows.Формы.Дизайн.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;
    }
}

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

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top