Padrão editores built-in para o controle PropertyGrid
-
09-09-2019 - |
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.
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.