Как я могу заставить PropertyGrid отображать настраиваемое диалоговое окно для определенного свойства?

StackOverflow https://stackoverflow.com/questions/359690

  •  21-08-2019
  •  | 
  •  

Вопрос

У меня есть класс со строковым свойством, имеющий как метод получения, так и метод установки, который часто бывает настолько длинным, что PropertyGrid усекает строковое значение.Как заставить PropertyGrid отображать многоточие, а затем запустить диалоговое окно, содержащее многострочное текстовое поле для удобного редактирования свойства?Я знаю, что мне, вероятно, придется установить какой-то атрибут для свойства, но какой атрибут и как?Должен ли мой диалог реализовать какой-то специальный дизайнерский интерфейс?

Обновлять: Этот возможно это ответ на мой вопрос, но поиском я его не нашел.Мой вопрос более общий, и ответ на него можно использовать для создания любого типа пользовательского редактора.

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

Решение

Вам необходимо установить [Editor(...)] за имущество, придав ему UITypeEditor это редактирование;вот так (с вашим собственным редактором...)

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;


static class Program
{
    static void Main()
    {
        Application.Run(new Form { Controls = { new PropertyGrid { SelectedObject = new Foo() } } });
    }
}



class Foo
{
    [Editor(typeof(StringEditor), typeof(UITypeEditor))]
    public string Bar { get; set; }
}

class StringEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        IWindowsFormsEditorService svc = (IWindowsFormsEditorService)
            provider.GetService(typeof(IWindowsFormsEditorService));
        if (svc != null)
        {
            svc.ShowDialog(new Form());
            // update etc
        }
        return value;
    }
}

Возможно, вы сможете отследить существующий редактор, просматривая существующие свойства, которые ведут себя так, как вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top