Pregunta

¿Existe un editor incorporado para una cadena multilínea en un PropertyGrid .

¿Fue útil?

Solución

Encontré que System.Design.dll tiene System.ComponentModel.Design.MultilineStringEditor que se puede usar de la siguiente manera:

public class Stuff
{
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string MultiLineProperty { get; set; }
}

Otros consejos

No, deberá crear lo que se llama un editor de tipo de interfaz de usuario modal. Tendrá que crear una clase que herede de UITypeEditor. Este es básicamente un formulario que se muestra cuando haces clic en el botón de puntos suspensivos en el lado derecho de la propiedad que estás editando.

El único inconveniente que encontré, fue que necesitaba decorar la propiedad de cadena específica con un atributo específico. Ha pasado un tiempo desde que tuve que hacer eso. Obtuve esta información de un libro de Chris Sells llamado "Programación de Windows Forms en C #" "

Hay un propertygrid comercial llamado Smart PropertyGrid.NET de VisualHint.

Sí. No recuerdo cómo se llama, pero mira el editor de propiedades de Items para algo como ComboBox

Editado: a partir de @fryguybob, ComboBox.Items usa System.Windows.Forms.Design.ListControlStringCollectionEditor

Necesitamos escribir nuestro editor personalizado para obtener el soporte multilínea en la cuadrícula de propiedades.

Aquí está la clase del editor de texto del cliente implementada desde 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;
    }
}

Escriba su cuadrícula de propiedades personalizadas y aplique este atributo de Editor a la propiedad

class CustomPropertyGrid
{
    private string multiLineStr = string.Empty;

    [Editor(typeof(MultiLineTextEditor), typeof(UITypeEditor))]
    public string MultiLineStr
    {
        get { return multiLineStr; }
        set { multiLineStr = value; }
    }
}

En forma principal asigna este objeto

 propertyGrid1.SelectedObject = new CustomPropertyGrid();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top