.net attributes propertygrid

.net - ¿Cómo puedo forzar a PropertyGrid a mostrar un cuadro de diálogo personalizado para una propiedad específica?



attributes (1)

Tengo una clase con una propiedad de cadena, que tiene tanto getter como setter, que a menudo es tan larga que PropertyGrid trunca el valor de la cadena. ¿Cómo puedo forzar a PropertyGrid a mostrar puntos suspensivos y luego abrir un cuadro de diálogo que contenga un cuadro de texto de líneas múltiples para una fácil edición de la propiedad? Sé que probablemente tenga que establecer algún tipo de atributo en la propiedad, pero ¿qué atributo y cómo? ¿Mi diálogo tiene que implementar alguna interfaz de diseñador especial?

Actualización: Esta es probablemente la respuesta a mi pregunta, pero no pude encontrarla buscando. Mi pregunta es más general y su respuesta se puede usar para construir cualquier tipo de editor personalizado.


Necesita establecer un [Editor(...)] para la propiedad, dándole un UITypeEditor que haga la edición; como tal (con tu propio editor ...)

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; } }

Puede rastrear un Editor existente mirando las propiedades existentes que se comportan como usted desea.