Pergunta

Eu não consigo encontrar a resposta para isso em qualquer lugar. O que os editores padrão / conversores estão construindo em 3,5 controle Framework PropertyGrid. Caso contrário, quais os tipos de objeto que pode deitar-se e ser capaz de mostrar e editar de forma confiável? Eu encontrei um monte de tutoriais sobre o uso de editores personalizados (que eu possa fazer em algum momento). Mas agora no meu programa que eu estou permitindo que o usuário crie suas próprias propriedades personalizadas e quero saber quais os tipos de objeto que deve permitir assumindo que eles serão editá-los em um PropertyGrid.

Foi útil?

Solução

Você pode querer dar uma olhada em classes que derivam de UITypeEditor (no System.Drawing.Design namespace ). Estes tipos serão passados ??como parâmetros para a EditorAttribute (no System.ComponentModel namespace ).

Você também pode olhar para os metadados para o tipo para ver onde o EditorAttribute é aplicada. No entanto, não uso reflexão aqui, como isso não é o que o usos classe PropertyGrid .

Em vez disso usar o TypeDescriptor classe para get descritores de propriedade para as propriedades no tipo (chamar o estático GetProperties método ). Então, com a PropertyDescriptor exemplo, chamar o < a href = "http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.geteditor.aspx" rel = "nofollow noreferrer"> método GetEditor para obter uma instância do editor para essa propriedade.

Outras dicas

Tenha em mente que há algumas classes não-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

Você pode realmente jogar qualquer objeto no PropertyGrid. Ele vai fazer um monte de coisas automaticamente. Você só precisa criar editores tipo interface do usuário personalizado se você quer ter uma experiência de edição especial, que não é nativamente fornecido. E mesmo nesse caso, você fazê-lo por propriedade e não para um objeto inteiro.

O PropertyGrid usa TypeConverters e há TypeConverters para cada tipo primitivo (bem como coleções de tipos primitivos).

Enquanto você estiver usando um dos tipos primitivos ou uma coleção de tipos primitivos da grade de propriedade deve ser capaz de cuidar de fornecer uma UI edição.

Além UITypeEditors, o PropertyGrid é capaz de exibir qualquer objeto com um TypeConverter que retorna true para CanConvertFrom (String). Você pode implementar suas próprias TypeConverters para tipos de objeto específico, a fim de alcançar este objetivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top