Hay un built-in editor de una cadena de varias líneas en una PropertyGrid.

InformationsquelleAutor fryguybob | 2008-09-24

4 Comentarios

  1. 50

    He encontrado que System.Design.dll ha System.ComponentModel.Design.MultilineStringEditor que puede ser utilizado de la siguiente manera:

    public class Stuff
    {
        [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
        public string MultiLineProperty { get; set; }
    }
    • ¿Qué versión de el .NET Framework vivió en?
    • msdn.microsoft.com/en-us/library/… indica que es en 2.0, 3.0 y 3.5.
    • Cómo usar esto? Estoy tratando de escribir [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] [CategoryAttribute(«Misc»), la Descripción(«Todos los encabezados http para este correo.»), DisplayName(«HTTP Headers»)] public string HttpHeaders { get { return correo.HttpHeaders; } } pero esto no muestra HttpHeaders como multilínea.
    • Es un multiline editor de así que yo creo que sólo vería una diferencia cuando de edición, de modo que sólo se aplicaría a las propiedades con un público setter.
    • Gracias fryguybob! ¿Sabes una manera de MOSTRAR varias líneas de cadena en una cuadrícula? De no editar? Gracias!
    • UITypeEditor es en el espacio de nombres del Sistema.De dibujo.Diseño
    • No puedo encontrar la MultilineStringEditor en el System.Design.dll de .Net Framework 4.6.1. Ha sido eliminado o solo estoy ciego?
    • Para utilizar este deberá agregar el System.Design.dll como una referencia a su proyecto.
    • Cómo hacer esto el propertygrid de wpf extendido lib

  2. 2

    No, usted tendrá que crear lo que se llama un modal de interfaz de usuario tipo de editor. Tendrás que crear una clase que hereda de UITypeEditor. Esto es, básicamente, una forma que se muestra cuando hace clic en el botón de puntos suspensivos a la derecha de la propiedad que se está editando.

    El único inconveniente que he encontrado, era lo que yo necesitaba para decorar la cadena específica de la propiedad con un atributo específico. Ha sido un tiempo desde que he tenido que hacerlo. Tengo esta información de un libro de Chris Vende llamado «Windows Forms Programación en C#»

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

  3. 0

    Sí. Yo no recuerdo bien cómo se llama, pero la mirada en los Elementos del editor de propiedades para algo como ComboBox

    Editado: Como la de @fryguybob, ComboBox.Elementos que utiliza el Sistema.Windows.Los formularios.Diseño.ListControlStringCollectionEditor

    • ComboBox.Elementos que utiliza el Sistema.Windows.Los formularios.Diseño.ListControlStringCollectionEditor, yo no creo que eso sea exactamente lo que yo estoy buscando, pero está cerca.
  4. 0

    Tenemos que escribir nuestro editor personalizado para conseguir el apoyo de multiline en la cuadrícula de propiedades.

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

    Escribir su propiedad personalizada de cuadrícula y aplicar este Editor de atributos de la propiedad

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

    En la principal forma de asignar este objeto

     propertyGrid1.SelectedObject = new CustomPropertyGrid();

Dejar respuesta

Please enter your comment!
Please enter your name here