2008-09-24 17 views

Respuesta

47

encontré que tiene System.Design.dllSystem.ComponentModel.Design.MultilineStringEditor que puede ser utilizado de la siguiente manera:

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

¿En qué versión de .NET Framework encontró eso? –

+0

http://msdn.microsoft.com/en-us/library/system.componentmodel.design.multilinestringeditor.aspx indica que está en 2.0, 3.0 y 3.5. – fryguybob

+0

¿Cómo usar esto? Estoy tratando de escribir [Editor (typeof (MultilineStringEditor), typeof (UITypeEditor))] [CategoryAttribute ("Misc"), Descripción ("Todos los encabezados http para este correo."), DisplayName ("HTTP Headers") ] cadena pública HttpHeaders { get {return mail.HttpHeaders; } } pero esto no muestra HttpHeaders como multilínea. – Alex

2

No, tendrá que crear lo que se denomina un editor modal de tipo UI. Deberá crear una clase que herede de UITypeEditor. Esto es básicamente un formulario que se muestra al hacer clic en el botón de puntos suspensivos en el lado derecho de la propiedad que está editando.

El único inconveniente que encontré, era 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 una malla de propiedad comercial llamada Smart PropertyGrid.NET por VisualHint.

0

Sí. No acabo de acuerdo cómo se llama, pero mira en el editor de artículos propiedad de algo así como ComboBox

Editado: A partir de @fryguybob, ComboBox.Items utiliza el System.Windows.Forms.Design.ListControlStringCollectionEditor

+0

ComboBox.Items utiliza el System.Windows.Forms.Design.ListControlStringCollectionEditor, I don No creo que sea exactamente lo que estoy buscando, pero está cerca. – fryguybob

0

tenemos que escribir nuestro editor personalizado para obtener el apoyo de varias líneas de cuadrícula de propiedades.

Aquí es la clase editor de texto al cliente implementado 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; 

     } 

    } 

Write your custom property grid and apply this Editor attribute to the property 

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(); 
Cuestiones relacionadas