Arquitetura de controle do ToolStrip

As ToolStrip classes e fornecem um sistema flexível e extensível para exibir itens de barra de ferramentas, status e ToolStripItem menu. Essas classes estão todas contidas no System.Windows.Forms namespace e são todas normalmente nomeadas com o prefixo "ToolStrip" (como ) ou com o sufixo "Strip" (como ToolStripOverflowMenuStrip).

ToolStrip

Os tópicos a seguir descrevem ToolStrip e os controles que derivam dele.

ToolStrip é a classe base abstrata para MenuStrip, StatusStripe ContextMenuStrip. O modelo de objeto a seguir mostra a hierarquia de ToolStrip herança.

Diagram that shows the ToolStrip object model.

Você pode acessar todos os itens em um ToolStrip através da Items coleção. Você pode acessar todos os itens em um ToolStripDropDownItem através da DropDownItems coleção. Em uma classe derivada de ToolStrip, você também pode usar a propriedade para acessar somente os DisplayedItems itens que são exibidos no momento. Estes são os itens que não estão atualmente em um menu de estouro.

Os itens a seguir são projetados especificamente para funcionar perfeitamente com ambos ToolStripSystemRenderer e ToolStripProfessionalRenderer em todas as orientações. Eles estão disponíveis por padrão em tempo de design para o ToolStrip controle:

MenuStrip é o contêiner de nível superior que substitui o MainMenu. Ele também oferece os recursos de manipulação de chaves e MDI (interface de múltiplos documentos). Funcionalmente, e ToolStripMenuItem trabalhar junto com MenuStrip, ToolStripDropDownItem embora eles são derivados de ToolStripItem.

Os itens a seguir são projetados especificamente para funcionar perfeitamente com ambos ToolStripSystemRenderer e ToolStripProfessionalRenderer em todas as orientações. Eles estão disponíveis por padrão em tempo de design para o MenuStrip controle:

StatusStrip

StatusStrip substitui o StatusBar controle. As características especiais incluem um layout de tabela personalizado, suporte para o dimensionamento do formulário e alças de StatusStrip movimentação e a Spring propriedade, que permite preencher o ToolStripStatusLabel espaço disponível automaticamente.

Os itens a seguir são projetados especificamente para funcionar perfeitamente com ambos ToolStripSystemRenderer e ToolStripProfessionalRenderer em todas as orientações. Eles estão disponíveis por padrão em tempo de design para o StatusStrip controle:

ContextMenuStrip

O ContextMenuStrip substitui o ContextMenu. Você pode associar um a qualquer controle, e um ContextMenuStrip clique direito do mouse exibe automaticamente o menu de contexto (ou menu de atalho). Você pode mostrar um ContextMenuStrip programaticamente usando o Show método. ContextMenuStripOferece suporte a eventos e Closing canceláveis Opening para lidar com população dinâmica e cenários de vários cliques. ContextMenuStrip Suporta imagens, estado de verificação de item de menu, texto, teclas de acesso, atalhos e menus em cascata.

Os itens a seguir são projetados especificamente para funcionar perfeitamente com ambos ToolStripSystemRenderer e ToolStripProfessionalRenderer em todas as orientações. Eles estão disponíveis por padrão em tempo de design para o ContextMenuStrip controle:

Recursos genéricos de ToolStrip

Os tópicos a seguir descrevem recursos e comportamento que são genéricos para os ToolStrip controles e derivados.

Pintura

Você pode fazer pintura personalizada em ToolStrip controles de várias maneiras. Assim como acontece com outros controles do Windows Forms, o ToolStrip e ambos têm métodos e ToolStripItemPaint eventos substituíveisOnPaint. Assim como ocorre com pintura regular, o sistema de coordenadas é relativo à área de cliente do controle, ou seja, o canto superior esquerdo do controle é 0, 0. O Paint evento e OnPaint o método para um ToolStripItem se comportam como outros eventos de pintura de controle.

Os ToolStrip controles também fornecem acesso mais preciso à renderização dos itens e do contêiner por meio da ToolStripRenderer classe, que tem métodos substituíveis para pintar o plano de fundo, o plano de fundo do item, a imagem do item, a seta do item, o texto do item e a ToolStripborda do . Os argumentos de evento para esses métodos expõem várias propriedades como retângulos, cores e formatos de texto que você pode ajustar conforme desejado.

Para ajustar apenas alguns aspectos de como um item é pintado, você normalmente substitui o ToolStripRenderer.

Se você estiver escrevendo um novo item e desejar controlar todos os aspectos de pintura, substitua o método OnPaint. De dentro OnPaintdo , você pode usar métodos do ToolStripRenderer.

Por padrão, o ToolStrip é buffer duplo, aproveitando a OptimizedDoubleBuffer configuração.

Gerenciamento do domínio pai

O conceito de propriedade e parentalidade de contêiner é mais complexo em controles do que em ToolStrip outros controles de contêiner do Windows Forms. Isso é necessário para dar suporte a cenários dinâmicos, como estouro, compartilhamento de itens suspensos entre vários ToolStrip itens e para dar suporte à geração de um ContextMenuStrip controle.

A lista a seguir descreve os membros relacionados ao gerenciamento do domínio pai e explica o seu uso.

Comportamento de controles herdados

Os seguintes controles são bloqueados sempre que eles são usados em herança:

Por exemplo, crie um novo aplicativo dos Windows Forms usando um ou mais dos controles na lista anterior. Defina o modificador de acesso de um ou mais controles para public ou protected e, em seguida, compile o projeto. Adicione um formulário que herda do primeiro formulário e, em seguida, selecione um controle herdado. O controle aparece bloqueado, comportando-se como se o seu modificador de acesso fosse private.

Suporte Herança de ToolStripContainer

O ToolStripContainer controle oferece suporte a cenários herdados limitados, semelhante ao exemplo a seguir:

  1. Crie um novo aplicativo Windows Forms.

  2. Adicione um ToolStripContainer ao formulário.

  3. Defina o modificador de acesso do ToolStripContainer para public ou protected.

  4. Adicione qualquer combinação de ToolStripcontroles , MenuStripe ContextMenuStrip às ToolStripPanel regiões do ToolStripContainer.

  5. Compile o projeto.

  6. Adicione um formulário que herda do primeiro formulário.

  7. Selecione o herdado ToolStripContainer no formulário.

Comportamento herdado de controles filho

Depois de você concluir as etapas anteriores, ocorre o seguinte comportamento herdado:

  • No designer, o controle aparece com um ícone herdado.

  • Os ToolStripPanel controles estão bloqueados, você não pode selecionar ou reorganizar seu conteúdo.

  • Você pode adicionar controles ao ToolStripContentPanel, mover os controles e torná-los controles filho do ToolStripContentPanel.

  • Suas alterações persistem após compilar o formulário.

    Observação

    Remova os modificadores de acesso de todos os ToolStripPanel controles que fazem parte de um ToolStripContainerarquivo . O modificador de acesso do controla todo o ToolStripContainer controle.

Confiança parcial

As limitações de ToolStrips sob confiança parcial são projetadas para impedir entrada acidental de informações pessoais que possam ser usadas por pessoas ou serviços não autorizados. As medidas de proteção são as seguintes:

  • ToolStripDropDown Os controles exigem AllWindows a exibição de itens em um ToolStripControlHostarquivo . Isso se aplica a controles intrínsecos, como ToolStripTextBox, ToolStripComboBoxe ToolStripProgressBar também a controles criados pelo usuário. Se esse requisito não for atendido, esses itens não serão exibidos. Nenhuma exceção é gerada.

  • A definição da AutoClose propriedade como false não é permitida e o parâmetro de evento cancelável Closing é ignorado. Isso torna impossível realizar mais de um pressionamento da tecla sem fechar o item suspenso. Se esse requisito não for atendido, esses itens não serão exibidos. Nenhuma exceção é gerada.

  • Muitos eventos de manipulação de pressionamento de tecla não serão gerados se ocorrerem em contextos de confiança parcial diferentes do AllWindows.

  • As chaves de acesso não são processadas quando AllWindows não são concedidas.

Uso

Os padrões de uso a seguir influenciam o layout, a interação com o teclado e o ToolStrip comportamento do usuário final:

  • Juntou-se em um ToolStripPanel

    O ToolStrip pode ser reposicionado dentro do e através ToolStripPanelde ToolStripPanel s. A Dock propriedade é ignorada e, se a Stretch propriedade for false, o tamanho do ToolStrip cresce à medida que os ToolStripPanelitens são adicionados ao . Normalmente, o ToolStrip não participa da ordem de tabulação.

  • Encaixado

    O ToolStrip é colocado em um lado de um contêiner em uma posição fixa, e seu tamanho se expande por toda a borda à qual está ancorado. Normalmente, o ToolStrip não participa da ordem de tabulação.

  • Posição absoluta

    O ToolStrip é como outros controles, em que ele é colocado pela propriedade, tem um tamanho fixo Location e normalmente participa da ordem de tabulação.

Interação do teclado

Teclas de acesso

Combinadas com ou após a tecla ALT, as teclas de acesso são uma maneira de ativar um controle usando o teclado. ToolStrip oferece suporte a chaves de acesso explícitas e implícitas. A definição explícita usa um caractere e comercial (&) que precede a letra. A definição implícita usa um algoritmo que tenta encontrar um item correspondente com base na ordem de caracteres em uma determinada propriedade Text.

Teclas de Atalho

As teclas de atalho usadas por um MenuStrip usam uma combinação da enumeração (que não é específica da ordem) para definir a tecla de Keys atalho. Você também pode usar a ShortcutKeyDisplayString propriedade para exibir uma tecla de atalho somente com texto, como exibir "Del" em vez de "Excluir".

A tecla ALT ativa o apontado MenuStrip por MainMenuStrip. A partir daí, CTRL+TAB navega entre ToolStrip controles dentro ToolStripPanelde s. A tecla TAB e as teclas de seta no teclado numérico navegam entre os itens em um ToolStriparquivo . Um algoritmo especial manipula a navegação na região de estouro. A barra de espaços seleciona um ToolStripButton, ToolStripDropDownButtonou ToolStripSplitButton.

Foco e validação

Quando ativado pela tecla ALT, o ou ToolStrip normalmente não tira nem remove o foco do controle que atualmente tem o MenuStrip foco. Se houver um controle hospedado no MenuStrip ou uma lista suspensa do MenuStrip, o controle ganha foco quando o usuário pressiona a tecla TAB. Em geral, o , , EnterLostFocuse Leave os GotFocuseventos de MenuStrip podem não ser gerados quando são ativados pelo teclado. Nesses casos, use o MenuActivate e MenuDeactivate eventos em vez disso.

Por padrão, CausesValidation é false. Chame Validate explicitamente em seu formulário para executar a validação.

Layout

Você controla ToolStrip o layout escolhendo um dos membros de ToolStripLayoutStyle com a LayoutStyle propriedade.

Layouts de pilha

Empilhamento é a organização de itens um ao lado do outro em ambas as extremidades do ToolStrip. A lista a seguir descreve os layouts de pilha.

Outros recursos de layouts de pilha

Alignment determina o final do ToolStrip item ao qual o item está alinhado.

Quando os itens não cabem no ToolStrip, um botão de estouro aparece automaticamente. A Overflow configuração de propriedade determina se um item aparece na área de estouro sempre, conforme necessário, ou nunca.

LayoutCompleted No caso, você pode inspecionar a Placement propriedade para determinar se um item foi colocado no principalToolStrip, no estouro ToolStripou se ele não está sendo exibido no momento. As razões típicas pelas quais um item não é exibido são que o item não se encaixou no principal ToolStrip e sua Overflow propriedade foi definida como Never.

Faça um móvel, colocando-o em um ToolStripToolStripPanel e definindo-o GripStyle para Visible.

Outras opções de layout

As outras opções de layout são Flow e Table.

Layout de fluxo

Flow layout é o padrão para ContextMenuStrip, ToolStripDropDownMenue ToolStripOverflow. É semelhante ao FlowLayoutPanel. As características do Flow layout são as seguintes:

Layout da tabela

Table layout é o padrão para StatusStrip. É semelhante ao TableLayoutPanel. As características do Flow layout são as seguintes:

ToolStripItem

Os tópicos a seguir descrevem ToolStripItem e os controles que derivam dele.

ToolStripItem é a classe base abstrata para todos os itens que entram em um ToolStriparquivo . O modelo de objeto a seguir mostra a hierarquia de ToolStripItem herança.

Diagram that shows the ToolStripItem object model.

ToolStripItemAs classes herdam diretamente do ToolStripItem, ou herdam indiretamente de através ToolStripControlHostToolStripDropDownItemou ToolStripItem .

ToolStripItemOs controles devem estar contidos em um , , MenuStripStatusStrip, ou ContextMenuStrip e não podem ser adicionados diretamente a um ToolStripformulário. As várias classes de contêiner são projetadas para conter um subconjunto apropriado de ToolStripItem controles.

A tabela a seguir lista os controles de estoque ToolStripItem e os contêineres nos quais eles se parecem melhor. Embora qualquer item possa ser hospedado em qualquer ToolStripToolStripcontêiner derivado, esses itens foram projetados para ter a melhor aparência nos seguintes contêineres:

Observação

ToolStripDropDown não aparece na caixa de ferramentas do designer.

Item contido ToolStrip MenuStrip ContextMenuStrip StatusStrip ToolStripDropDown
ToolStripButton Sim Não No No Sim
ToolStripComboBox Sim Sim Sim Não Sim
ToolStripSplitButton Sim Não No Sim Sim
ToolStripLabel Sim Não No Sim Sim
ToolStripSeparator Sim Sim Sim Não Sim
ToolStripDropDownButton Sim Não No Sim Sim
ToolStripTextBox Sim Sim Sim Não Sim
ToolStripMenuItem Não Sim Sim Não No
ToolStripStatusLabel No No No Sim Não
ToolStripProgressBar Sim Não No Sim Não
ToolStripControlHost Sim Sim Não Sim Yes

ToolStripButton

ToolStripButton é o item de botão para ToolStrip. Você pode exibi-lo com vários estilos de borda e pode usá-lo para representar e ativar estados operacionais. Você também pode defini-lo para ter o foco por padrão.

ToolStripLabel

O ToolStripLabel fornece funcionalidade de rótulo em ToolStrip controles. O ToolStripLabel é como um ToolStripButton que não recebe foco por padrão e que não renderiza como empurrado ou destacado.

ToolStripLabel como um item hospedado oferece suporte a chaves de acesso.

Use as LinkColorpropriedades , LinkVisitede LinkBehavior em um para oferecer suporte ao controle de link em um ToolStripLabelToolStriparquivo .

ToolStripStatusLabel

ToolStripStatusLabel é uma versão do ToolStripLabel projetado especificamente para uso em StatusStrip. As características especiais incluem BorderStyle, BorderSidese Spring.

ToolStripSeparator

O ToolStripSeparator adiciona uma linha vertical ou horizontal a uma barra de ferramentas ou menu, dependendo da orientação. Ele fornece o agrupamento de ou a distinção entre itens, assim como aqueles em um menu.

Você pode adicionar um ToolStripSeparator em tempo de design escolhendo-o em uma lista suspensa. No entanto, você também pode criar automaticamente um digitando um ToolStripSeparator hífen (-) no nó do modelo de designer ou no Add método.

ToolStripControlHost

ToolStripControlHost é a classe base abstrata para ToolStripComboBox, ToolStripTextBoxe ToolStripProgressBar. ToolStripControlHost pode hospedar outros controles, incluindo controles personalizados, de duas maneiras:

  • Construa um ToolStripControlHost com uma classe que deriva de Control. Para acessar totalmente o controle hospedado e as propriedades, você deve converter a propriedade de volta para a Control classe real que ela representa.

  • Extend ToolStripControlHoste, no construtor sem parâmetros da classe herdada, chame o construtor de classe base passando uma classe que deriva de Control. Essa opção permite encapsular métodos e propriedades de controle comuns para facilitar o acesso em um ToolStriparquivo .

ToolStripComboBox

ToolStripComboBox é o ComboBox otimizado para hospedagem em um ToolStriparquivo . Um subconjunto das propriedades e eventos do controle hospedado são expostos no ToolStripComboBox nível, mas o controle subjacente ComboBox é totalmente acessível por meio da ComboBox propriedade.

ToolStripTextBox

ToolStripTextBox é o TextBox otimizado para hospedagem em um ToolStriparquivo . Um subconjunto das propriedades e eventos do controle hospedado são expostos no ToolStripTextBox nível, mas o controle subjacente TextBox é totalmente acessível por meio da TextBox propriedade.

ToolStripProgressBar

ToolStripProgressBar é o ProgressBar otimizado para hospedagem em um ToolStriparquivo . Um subconjunto das propriedades e eventos do controle hospedado são expostos no ToolStripProgressBar nível, mas o controle subjacente ProgressBar é totalmente acessível por meio da ProgressBar propriedade.

ToolStripDropDownItem

ToolStripDropDownItemé a classe base abstrata para ToolStripMenuItem, e ToolStripSplitButton, ToolStripDropDownButtonque pode hospedar itens diretamente ou hospedar itens adicionais em um contêiner suspenso. Você faz isso definindo a propriedade como a e definindo a DropDownToolStripDropDownItems propriedade do .ToolStripDropDown Acesse esses itens suspensos diretamente pela DropDownItems propriedade.

ToolStripMenuItem

ToolStripMenuItem é um ToolStripDropDownItem que funciona com e para lidar com ToolStripDropDownMenu o realce especial, layout e ContextMenuStrip disposição de colunas para menus.

ToolStripDropDownButton

ToolStripDropDownButtonToolStripButtonparece , mas mostra uma área suspensa quando o usuário clica nela. Oculte ou mostre a seta suspensa definindo a ShowDropDownArrow propriedade. ToolStripDropDownButton hospeda um ToolStripOverflowButton que exibe itens que estouram o ToolStrip.

ToolStripSplitButton

ToolStripSplitButton combina a funcionalidade de botão e botão suspenso.

Use a DefaultItem propriedade para sincronizar o evento do item suspenso escolhido com o Click item mostrado no botão.

Recursos genéricos de ToolStripItem

ToolStripItem fornece os seguintes recursos e opções genéricas para herdar controles:

  • Eventos principais

  • Tratamento de imagem

  • Alinhamento

  • Relação de texto e imagem

  • Estilo de exibição

Eventos Principais

ToolStripItem Os controles recebem seus próprios eventos de clique, mouse e pintura e também podem executar alguns pré-processamento do teclado.

Tratamento de Imagem

As Imagepropriedades , , ImageAlignImageIndex, ImageKeye ImageScaling pertencem a vários aspectos do tratamento de imagens. Use imagens em ToolStrip controles definindo essas propriedades diretamente ou definindo a propriedade somente ImageList tempo de execução.

O dimensionamento da imagem é determinado pela interação das propriedades em ambos ToolStrip e ToolStripItem, da seguinte maneira:

Alinhamento

O valor da Alignment propriedade determina o ToolStrip final do em que um item aparece. A Alignment propriedade funciona somente quando o estilo de layout do é definido como um dos valores de estouro de ToolStrip pilha.

Os itens são colocados no ToolStrip na ordem em que os itens aparecem na coleção Items. Para alterar programaticamente onde um item está disposto, use o método para mover o Insert item na coleção. Esse método move o item, mas não o duplica.

Relação de Texto e Imagem

A TextImageRelation propriedade define o posicionamento relativo da imagem em relação ao texto em um ToolStripItemarquivo . Os itens que não possuem uma imagem, texto ou ambos são tratados como casos especiais para que o não exiba um ponto em branco para o ToolStripItem elemento ou elementos ausentes.

Estilo de Exibição

DisplayStyle permite que você defina os valores das propriedades Text e Image de um item enquanto exibe apenas o que você deseja. Isso normalmente é usado para alterar o estilo de exibição ao mostrar o mesmo item em um contexto diferente.

Classes acessórias

Classes que fornecem várias outras funcionalidades incluem:

Confira também