Как я могу заставить PropertyGrid отображать настраиваемое диалоговое окно для определенного свойства?
-
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;
}
}
Возможно, вы сможете отследить существующий редактор, просматривая существующие свойства, которые ведут себя так, как вы хотите.