Pregunta

Parece que no puedo encontrar la respuesta a esto en ninguna parte.Qué editores/convertidores predeterminados están integrados en el control PropertyGrid del marco 3.5.De lo contrario, ¿qué tipos de objetos puedo lanzarle y poder mostrarlos y editarlos de manera confiable?Encontré muchos tutoriales sobre el uso de editores personalizados (que quizás haga en algún momento).Pero ahora mismo en mi programa estoy permitiendo al usuario crear sus propias propiedades personalizadas y quiero saber qué tipos de objetos debo permitir suponiendo que los editarán en un PropertyGrid.

¿Fue útil?

Solución

Es posible que desee echar un vistazo a las clases que se derivan de UITypeEditor (en el System.Drawing.Design espacio de nombres).Estos tipos se pasarán como parámetros al EditorAttribute (en el System.ComponentModel espacio de nombres).

También puede consultar los metadatos del tipo para ver dónde EditorAttribute Está aplicado.Sin embargo, no Utilice la reflexión aquí, ya que eso no es lo que el PropertyGrid clase usos.

Más bien usa el TypeDescriptor clase para obtener descriptores de propiedad para las propiedades del tipo (llame al método estático GetProperties método).Entonces, con el PropertyDescriptor ejemplo, llame al GetEditor método para obtener una instancia del editor para esa propiedad.

Otros consejos

Tenga en cuenta que hay algunas clases que no son públicas.

System.Object
  System.Drawing.Design.UITypeEditor
    System.ComponentModel.Design.CollectionEditor
      System.ComponentModel.Design.ArrayEditor
      System.Web.UI.Design.CollectionEditorBase
      System.Web.UI.Design.WebControls.WizardStepCollectionEditor
      System.Web.UI.Design.WebControls.EmbeddedMailObjectCollectionEditor
      System.Web.UI.Design.WebControls.HotSpotCollectionEditor
      System.Web.UI.Design.WebControls.ListItemsCollectionEditor
      System.Web.UI.Design.WebControls.MenuItemStyleCollectionEditor
      System.Web.UI.Design.WebControls.RoleGroupCollectionEditor
      System.Web.UI.Design.WebControls.StyleCollectionEditor
      System.Web.UI.Design.WebControls.SubMenuStyleCollectionEditor
      System.Web.UI.Design.WebControls.TableCellsCollectionEditor
      System.Web.UI.Design.WebControls.TableRowsCollectionEditor
    System.ComponentModel.Design.BinaryEditor
    System.ComponentModel.Design.DateTimeEditor
    System.ComponentModel.Design.MultilineStringEditor
    System.ComponentModel.Design.ObjectSelectorEditor
    System.Windows.Forms.Design.AnchorEditor
    System.Windows.Forms.Design.BorderSidesEditor
    System.Windows.Forms.Design.DockEditor
    System.Windows.Forms.Design.FileNameEditor
    System.Windows.Forms.Design.FolderNameEditor
    System.Windows.Forms.Design.ShortcutKeysEditor
    System.Web.UI.Design.ConnectionStringEditor
    System.Web.UI.Design.DataBindingCollectionEditor
    System.Web.UI.Design.ExpressionsCollectionEditor
    System.Web.UI.Design.UrlEditor
    System.Web.UI.Design.XmlFileEditor
    System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor
    System.Web.UI.Design.WebControls.DataControlFieldTypeEditor
    System.Web.UI.Design.WebControls.MenuBindingsEditor
    System.Web.UI.Design.WebControls.MenuItemCollectionEditor
    System.Web.UI.Design.WebControls.ParameterCollectionEditor
    System.Web.UI.Design.WebControls.RegexTypeEditor
    System.Web.UI.Design.WebControls.TreeNodeCollectionEditor
    System.Web.UI.Design.WebControls.TreeViewBindingsEditor
    System.Web.UI.Design.WebControls.DataPagerFieldTypeEditor
    System.Messaging.Design.QueuePathEditor
    System.Drawing.Design.ImageEditor
    System.Drawing.Design.ColorEditor
    System.Drawing.Design.ContentAlignmentEditor
    System.Drawing.Design.CursorEditor
    System.Drawing.Design.FontEditor
    System.Drawing.Design.FontNameEditor
    System.Drawing.Design.IconEditor
    System.Workflow.ComponentModel.Design.TypeBrowserEditor
    System.Workflow.ComponentModel.Design.BindUITypeEditor

En realidad se puede tirar cualquier objeto en el PropertyGrid. Se va a hacer un montón de cosas de forma automática. Sólo es necesario para crear editores tipo de interfaz de usuario personalizado, si usted quiere tener una experiencia de edición especial, que no está previsto de forma nativa. E incluso en ese caso, lo hace por propiedad y no para todo el objeto.

El PropertyGrid utiliza TypeConverters y hay TypeConverters para cada tipo primitivo (así como colecciones de tipos primitivos).

Mientras usted está utilizando uno de los tipos primitivos o una colección de tipos primitivos de la cuadrícula de propiedades debería ser capaz de cuidar de proporcionar una interfaz de usuario de edición.

Además UITypeEditors, la PropertyGrid es capaz de mostrar cualquier objeto con una TypeConverter que devuelve cierto para CanConvertFrom (String). Se puede implementar sus propias TypeConverters para tipos de objetos específicos con el fin de lograr esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top