Exportar (0) Imprimir
Expandir Tudo

Demonstra Passo a passo: Adding Tags Smart to a Windows Formulários Component

As marcas inteligentes são elementos da interface (UI) do menu-como usuário que forneçam opções em tempo de design usadas com freqüência. A maioria dos componentes padrão e controles fornecidos com o .NET Framework contêm marca inteligente e melhorias verbo Designer. The Procedures in this apresentação explicação passo a passo you How to inteligente adicionar-suporte marca to Components and personalizado Controles.

Você pode adicionar marcas inteligente para Windows Forms componentes para fornecer usado design-tempo Opções. Itens em um painel de marca inteligente logicamente são agrupadas por categoria, e instâncias individuais DesignerActionMethodItem opcionalmente podem ser duplicadas como entradas de verbo Designer. Muitos dos controles fornecidos com o .NET Framework e de componentes padrão contêm marca inteligente e melhorias verbo Designer. Component and personalizado Controlar authors can also inteligente adicionar-marca suporte, geralmente by Using the modelo enviar.

Adicionar marcas inteligentes com o modelo de envio requer as seguintes adições ao projeto do componente:

  • Implementação de uma classe, derivada de DesignerActionList, que define a métodos e propriedades que são alvos de itens de menu de marca inteligente. Essa classe também pode fornecer um método substituído GetSortedActionItems que retorna uma matriz de instâncias DesignerActionItem.

  • A classe do designer associada ao componente deve implementar a propriedade ActionLists. Retrieving this propriedade Supplies the DesignerActionListCollection that contains Tudo the instances DesignerActionList associado with a inteligente Single-marca menu. Geralmente há apenas uma lista no tal uma coleção.

ms171829.alert_note(pt-br,VS.80).gif Observação:

Painéis de marca inteligente não oferece suporte a rolagem ou paginação, portanto, tenha cuidado para não preencher suas painéis com muitos itens de marca inteligente. Muitos itens podem resultar em Painel de marca inteligente estendendo além do limite da tela.

O seguinte procedimento demonstra como adicionar inteligente marcas usando Código de um controle simples exemplo, ColorLabel, que é derivado do padrão controle Label Windows Forms. This Controlar has an associado designer nomeado ColorLabelDesigner.

Para copiar o Código neste tópico como uma listagem único, ver Como: Attach to a Windows Formulários Component Tags Smart.

A fim de completar este passo a passo, você vai precisar:

  • Permissions sufficient to be able to Criar and executar Projects aplicativo do Windows Forms on the computador where the .NET Framework Is Installed.

Para implementar uma classe derivada de DesignerActionList

  1. In the same Namespace as your componente, Adicionar the declaração For Your classe derivado from DesignerActionList.

      ColorLabelActionList :
              System.ComponentModel.Design.DesignerActionList
    
    
    
  2. Add a construtor to this classe that Takes an instância of the associado Controlar. Fornece um campo particular para manter uma referência a essa instância. Também forneça um campo particular para armazenar em cache uma referência para o DesignerActionService. Isso será usado para atualizar a lista.

    private ColorLabel colLabel;
    
    
    ...
    
    
    private DesignerActionUIService designerActionUISvc = null;
    
    
    ...
    
    
    public ColorLabelActionList( IComponent component ) : base(component) 
    {
        this.colLabel = component as ColorLabel;
    
        // Cache a reference to DesignerActionUIService, so the
        // DesigneractionList can be refreshed.
        this.designerActionUISvc =
            GetService(typeof(DesignerActionUIService))
            as DesignerActionUIService;
    }
    
    
    
  3. Add Métodos and Properties that you desejar to associar to inteligente-marca Items. Métodos será executado quando seus correspondente inteligente-entrada marca está selecionada. Propriedades devem ter Getter seções para que seu valor atual é exibido; Opcionalmente, eles podem ter seções setter que use o método GetProperties se seus valores forem ser editável da entrada de marca inteligente correspondente.

    ms171829.alert_note(pt-br,VS.80).gif Observação:

    As is the maiúsculas e minúsculas Throughout the design-tempo Ambiente, a propriedade is capable of being Edited only if one of the types de base is provided by the .NET Framework, the tipo can be converted into a tipo base by a supplied TypeConverter, or When a personalizado UITypeEditor is supplied.

    public Color ForeColor
    {
        get
        {
            return colLabel.ForeColor;
        }
        set
        {
            GetPropertyByName("ForeColor").SetValue(colLabel, value);
        }
    }
    
    
    ...
    
    
    // Boolean properties are automatically displayed with binary 
    // UI (such as a checkbox).
    public bool LockColors
    {
        get
        {
            return colLabel.ColorLocked;
        }
        set
        {
            GetPropertyByName("ColorLocked").SetValue(colLabel, value);
    
            // Refresh the list.
            this.designerActionUISvc.Refresh(this.Component);
        }
    }
    
    
    ...
    
    
    public void InvertColors()
    {
        Color currentBackColor = colLabel.BackColor;
        BackColor = Color.FromArgb(
            255 - currentBackColor.R, 
            255 - currentBackColor.G, 
            255 - currentBackColor.B);
    
        Color currentForeColor = colLabel.ForeColor;
        ForeColor = Color.FromArgb(
            255 - currentForeColor.R, 
            255 - currentForeColor.G, 
            255 - currentForeColor.B);
    }
    
    
    
  4. Optionally implementar versão an overridden of the método GetSortedActionItems to Return an matriz of DesignerActionItem instances, WHERE is each item associado with a propriedade or método Criado in the previous etapa. Você pode fazer isso para alterar a ordem dos itens, categorizá-las ou opcionalmente mostrá-las. A lista também pode incluir Estático itens, como títulos lógicos GRUPO.

      DesignerActionItemCollection GetSortedActionItems()
    {
        DesignerActionItemCollection items =  DesignerActionItemCollection();
    
        
        items.Add( DesignerActionHeaderItem());
        items.Add( DesignerActionHeaderItem());
    
        
        items.Add( DesignerActionPropertyItem(,
                         , ,
                         ));
         (!LockColors)
        {
            items.Add( DesignerActionPropertyItem(,
                             , ,
                             ));
            items.Add( DesignerActionPropertyItem(,
                             , ,
                             ));
    
            
            
            items.Add( DesignerActionMethodItem(,
                             , ,
                             ,
                             ,
                              ));
        }
        items.Add( DesignerActionPropertyItem(,
                         , ,
                         ));
    
        
        StringBuilder location =  StringBuilder();
        location.Append(colLabel.Location);
        StringBuilder size =  StringBuilder();
        size.Append(colLabel.Size);
        items.Add( DesignerActionTextItem(location.ToString(),
                         ));
        items.Add( DesignerActionTextItem(size.ToString(),
                         ));
    
         items;
    }
    
    
    

Para atualizar a classe do designer associada para implementar a propriedade ActionLists

  1. Locate the designer classe for the Controlar. Se um não existir, Criar um designer classe e associá-lo para a classe controle. Para obter mais informações sobre os designers, consulte Classes base Designer.

  2. Como uma técnica otimização, adicionar um Particular campo do tipo DesignerActionListCollection.

     DesignerActionListCollection actionLists;
    
    
    
  3. Add the propriedade overridden ActionLists to Return a instância New of the classe ColorLabelActionList that you Criado earlier.

      DesignerActionListCollection ActionLists
    {
        
        {
             ( == actionLists)
            {
                actionLists =  DesignerActionListCollection();
                actionLists.Add(
                     ColorLabelActionList(.Component));
            }
             actionLists;
        }
    }
    
    
    

Several areas of the codificar deserve a more Detalhado Explanation:

  • When a propriedade or método in the classe derivado from DesignerActionList Changes the estado of the associado Controlar, these Changes should not be made by direcionar Calls setter to Properties the 's componente. INSTEAD, such Changes should be made through an appropriately Criado PropertyDescriptor. Essa abordagem indireta garante que desfazer marca inteligente e interface de usuário atualizar ações função corretamente.

  • Você pode atualizar dinamicamente o painel de marca inteligente chamando DesignerActionUIService.Refresh. Esse processo pode ser usado para alterar dinamicamente o conteúdo do painel da marca inteligente. In the exemplo, the inteligente tags concerned with Changing Colors are conditionally Incluído depending on the estado of the propriedade LockColors. This Boolean propriedade is also associado with a marca inteligente, SO the desenvolvedor can bloqueio or desbloquear the atual seleção cor, at least Através the menu.

  • A inteligente-entrada marca of tipo DesignerActionMethodItem can be optionally included in the menu atalho for the associado Controlar by configuração the parâmetro includeAsDesignerVerb in the construtor to true. O .NET Framework, em seguida, implicitamente cria um correspondente DesignerVerb e o adiciona ao menu de atalho para você. Neste exemplo, o item InvertColors é tratado dessa maneira.

  • Itens de marca inteligente são agrupados em um painel por sua propriedade Category, que é definida no construtor para cada item. If this propriedade não é set explicitamente, it is Assigned to the categoria usar como padrão. Cada item é ordenada no painel de marca inteligente por categoria, em seguida, por ordem de ocorrência na matriz retornada pela classe derivada de classe DesignerActionItemDesignerActionList. Este exemplo contém duas categorias: Appearance e Information.

    ms171829.alert_note(pt-br,VS.80).gif Observação:

    No DesignerActionHeaderItem is supplied for the segundo categoria.

  • Uma entrada que exibe informações de texto estático pode ser implementada usando um DesignerActionTextItem ou um DesignerActionPropertyItem cuja propriedade associada contém apenas um Setter. Este exemplo usa a primeira abordagem.

Depois que você tenha começar integrar seu componente o ambiente em tempo de design, considere expandir seu suporte de designer.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft