Visão geral dos editores de tipos da interface do usuário
Você pode fornecer uma experiência de tempo de design personalizada para tipos de propriedade complexa, Implementando um editor de tipo de interface (UI) do usuário.
Exibir e editar tipos personalizados
Ao ser exposto a um tipo personalizado como uma propriedade, há três maneiras de editar o valor da propriedade em um PropertyGrid:
Você pode editar sua propriedade no lugar como uma seqüência de caracteres. Isso requer um TypeConverter para o seu tipo personalizado. Para obter mais informações, consulte Como implementar um conversor de tipos.
Você pode editar sua propriedade com uma interface de usuário da lista suspensa. Isso é especialmente útil para as propriedades que podem ser definidas com um único clique.
Você pode editar sua propriedade com uma caixa de diálogo modal. Se sua propriedade for particularmente complexa, uma caixa de diálogo completo pode ser necessária editá-lo corretamente.
Para habilitar o clique único ou a edição da caixa de diálogo restrita, você precisa implementar um editor UI de tipo para interagir com um PropertyGrid.
Drop-down editores
Drop-down editores são ideais para tipos que podem ser definidos com um único clique. Por exemplo, edite o Dock e BackColor propriedades da Control de classe em um PropertyGrid com um editor de lista suspensa.
Acesso a um editor UI de lista suspensa tipo clicando no botão de seta () que aparece próximo à entrada da propriedade selecionada em um PropertyGrid. Sua interface do usuário personalizada for exibida, anexado ao PropertyGrid. A parte superior da janela que a está posicionada na parte inferior da entrada de propriedade, e sua largura correspondente da entrada de propriedade. Esta janela do editor também deve ser fechada depois que o usuário faz uma seleção. Sua implementação deve chamar o DropDownControl método para posicionar e dimensionar sua interface do usuário digite a janela do editor no ambiente de design, e você deve chamar o CloseDropDown método para fechar a janela.
Editores de diálogo modal
Editores de janela restritas são úteis para tipos que exigem uma interface de usuário totalmente interativo. Por exemplo, os editores de coleção como o TabPage Collection Editor de TabControl ou o Edit Columns caixa de diálogo da DataGridView controle são editores modais.
Acesso a um editor UI de tipo modal clicando no botão de reticências () que aparece próximo à entrada da propriedade selecionada em um PropertyGrid. Sua caixa de diálogo modal aparece e o usuário interage com ele como uma caixa de diálogo típicas. Sua implementação deve chamar o ShowDialog método para posicionar e dimensionar a sua caixa de diálogo no ambiente de design.
Implementando um Editor UI de tipo
Para implementar um editor UI de tipo personalizado, você deve pelo menos executar as seguintes tarefas:
Definir uma classe que deriva de UITypeEditor.
Substituir o GetEditStyle método para informar o PropertyGrid do tipo de estilo do editor que usará o editor.
Substituir o EditValue método para manipular a interface do usuário, processamento de entrada do usuário e atribuição de valor.
Você pode adicionar suporte adicional para pintar a representação de um valor em um PropertyGrid , realizando as seguintes tarefas:
Substituir GetPaintValueSupported para indicar que o editor suporta exibindo a representação do valor.
Substituir PaintValue para implementar a exibição de representação do valor.
Substituir o UITypeEditor método construtor se o editor deve ter um comportamento de inicialização.
Dica
Editores de tipo de interface do usuário são geralmente implementados usando tipos a partir do System.Windows.Forms namespace, mas isso não é um requisito.Os editores de tipo de interface do usuário padrão na.NET Framework derivam de UITypeEditor.
Derivação da classe UITypeEditor
Seu editor de tipos de interface do usuário personalizado deve derivar da UITypeEditor classe. Defina um construtor padrão se o seu editor de tipos de interface do usuário requer inicialização especial.
Substituindo o método GetEditStyle
Quando você seleciona um componente ou controle no designer, o Propriedades janela é redesenhada com os valores de propriedade do componente selecionado ou controle. Quando você seleciona uma propriedade, as consultas do ambiente de design do GetEditStyle método para determinar como representar a entrada de propriedade.
Seu substituto retorna um valor a partir do UITypeEditorEditStyle enumeração para comunicar-se o estilo apropriado do editor do tipo de interface do usuário.
A tabela a seguir mostra o comportamento associado a cada UITypeEditorEditStyle valor.
Nome do membro |
Comportamento |
---|---|
Não fornece a nenhum componente de interface do usuário interativo. Um número apropriado TypeConverter é usado para converter uma entrada de seqüência de caracteres ao valor da propriedade. |
|
Exibe um botão de seta para baixo () na entrada de propriedade. A interface do usuário está hospedado em uma janela de lista suspensa. |
|
Exibe um botão de reticências () na entrada de propriedade. A interface do usuário é uma caixa de diálogo modal. |
Substituindo o método EditValue
O EditValue método exibe a interface do usuário e define o valor da propriedade para o valor selecionado pelo usuário.
Editor de lista suspensa
Para um editor de tipo suspenso da interface do usuário, você pode consultar um provedor de serviços para o IWindowsFormsEditorService interface. Esse serviço fornece informações sobre o tamanho de sua interface do usuário e de posição. A interface do usuário normalmente será implementado como um Control. O EditValue implementação cria uma instância desse controle, inicializa com o valor atual da propriedade e, em seguida, passá-lo para o DropDownControl método para execução pelo ambiente de design. Quando o usuário tiver selecionado um novo valor para a propriedade, o EditValue implementação fecha a interface do usuário chamando CloseDropDown. O valor de retorno do seu EditValue implementação torna-se o novo valor da propriedade exibido em um PropertyGrid.
Editor modal
Para um editor modal de tipo de interface do usuário, você pode consultar um provedor de serviços para o IWindowsFormsEditorService interface. Esse serviço fornece informações de posição para sua caixa de diálogo. A interface do usuário normalmente será implementado como uma classe derivada de Form. O EditValue implementação cria uma instância desse formulário, inicializa com o valor atual da propriedade e, em seguida, passá-lo para o ShowDialog método para execução pelo ambiente de design. Se o valor de retorno desta chamada é OK, você recupera o novo valor da propriedade do formulário e usá-lo como o valor de retorno. O valor de retorno do seu EditValue implementação torna-se o novo valor da propriedade exibido em um PropertyGrid.
Parâmetro ITypeDescriptorContext
O EditValue método recebe um ITypeDescriptorContext parâmetro, que você pode usar para consultar informações contextuais sobre o ambiente de design. Com esse parâmetro, você pode acessar os seguintes membros:
A PropertyDescriptor que representa os metadados da propriedade
Um Instance propriedade refere-se ao componente selecionado na PropertyGrid.
O componente IContainer.
OnComponentChanginge OnComponentChanged métodos que alertam o ambiente de design, quando você altera o estado de um componente.
Fornecer uma representação gráfica do valor da propriedade
Você pode exibir uma representação gráfica do valor da sua propriedade, substituindo o PaintValue método. Você pode usar o fornecido PaintValueEventArgs parâmetro para desenhar sua representação em um pequeno retângulo no lado esquerdo da entrada da propriedade em um PropertyGrid.
Dica
Certifique-se de manter sua representação gráfica dentro dos limites definidos pelo Bounds propriedade da PaintValueEventArgs parâmetro.
Substituir o GetPaintValueSupported método para retornar true para o ambiente de design de alerta que o seu editor de tipos de interface do usuário pinta uma representação personalizada do seu valor.
Consulte também
Tarefas
Como criar um editor de tipos da interface do usuário
Como criar um controle do Windows Forms que aproveita recursos de tempo de design