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.
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
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 ToolStripItem Paint
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 OnPaint
do , 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.
OwnerItem acessa o item que é a origem do item suspenso. Isso é semelhante ao SourceControl, mas em vez de retornar um controle, ele retorna um ToolStripItemarquivo .
SourceControl Determina qual controle é a origem do ContextMenuStrip quando vários controles compartilham o mesmo ContextMenuStrip.
GetCurrentParent é um acessador somente leitura para a Parent propriedade. Um pai difere de um proprietário porque um pai denota a corrente ToolStrip retornada na qual o item é exibido, que pode estar na área de estouro.
Owner retorna a ToolStrip coleção cujos Items contém o arquivo ToolStripItem. Essa é a melhor maneira de fazer referência ImageList ou outras propriedades no nível ToolStrip superior sem escrever código especial para lidar com estouro.
Comportamento de controles herdados
Os seguintes controles são bloqueados sempre que eles são usados em herança:
ToolStripPanel que inclui os painéis em um ToolStripContainer e também controles individuais ToolStripPanel .
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:
Crie um novo aplicativo Windows Forms.
Adicione um ToolStripContainer ao formulário.
Defina o modificador de acesso do ToolStripContainer para
public
ouprotected
.Adicione qualquer combinação de ToolStripcontroles , MenuStripe ContextMenuStrip às ToolStripPanel regiões do ToolStripContainer.
Compile o projeto.
Adicione um formulário que herda do primeiro formulário.
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 ToolStrip
s 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 forfalse
, 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".
Navegação
A tecla ALT ativa o apontado MenuStrip por MainMenuStrip. A partir daí, CTRL+TAB navega entre ToolStrip controles dentro ToolStripPanel
de 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.
StackWithOverflow é o padrão. Essa configuração faz com que o altere ToolStrip seu layout automaticamente de acordo com a Orientation propriedade para lidar com cenários de arrastamento e encaixe.
VerticalStackWithOverflow renderiza os itens um ao lado do ToolStrip outro verticalmente.
HorizontalStackWithOverflow renderiza os itens um ao lado do ToolStrip outro horizontalmente.
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 ToolStrip ToolStripPanel 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:
Todas as características do FlowLayoutPanel são expostas pela LayoutSettings propriedade. Você deve transmitir a LayoutSettings classe para uma FlowLayoutSettings classe.
Você pode usar as Dock propriedades e Anchor no código para alinhar os itens dentro da linha.
A propriedade Alignment é ignorada.
LayoutCompleted No caso, você pode inspecionar a Placement propriedade para determinar se um item foi colocado no principal ToolStrip ou não se encaixou.
A aderência não é renderizada e, portanto, um estilo de layout em Flow um ToolStrip ToolStripPanel não pode ser movido.
O ToolStrip botão de estouro não é renderizado e Overflow é ignorado.
Layout da tabela
Table layout é o padrão para StatusStrip. É semelhante ao TableLayoutPanel. As características do Flow layout são as seguintes:
Todas as características do TableLayoutPanel são expostas pela LayoutSettings propriedade. Você deve transmitir a LayoutSettings classe para uma TableLayoutSettings classe.
Você pode usar as Dock propriedades e Anchor no código para alinhar os itens dentro da célula da tabela.
A propriedade Alignment é ignorada.
LayoutCompleted No caso, você pode inspecionar a Placement propriedade para determinar se um item foi colocado no principal ToolStrip ou não se encaixou.
A aderência não é renderizada e, portanto, um estilo de layout em Table um ToolStrip ToolStripPanel não pode ser movido.
O ToolStrip botão de estouro não é renderizado e Overflow é ignorado.
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.
ToolStripItemAs classes herdam diretamente do ToolStripItem, ou herdam indiretamente de através ToolStripControlHost ToolStripDropDownItemou 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 ToolStrip ToolStripcontê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 ToolStripLabel ToolStriparquivo .
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 DropDown ToolStripDropDown Items 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:
ImageScalingSize é a escala da imagem final determinada pela combinação da configuração da imagem ImageScaling e da configuração do AutoSize contêiner.
Se AutoSize for (o padrão) e for SizeToFit
true
, não ocorrerá dimensionamento de imagem e ToolStripItemImageScaling o tamanho será o ToolStrip do item maior ou um tamanho mínimo prescrito.Se AutoSize é e ToolStripItemImageScaling é None
false
, nem imagem nem ToolStrip dimensionamento ocorrem.
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:
ToolStripManager oferece suporte a tarefas relacionadas a ToolStripaplicativos inteiros, como mesclagem, configurações e opções de renderização.
ToolStripRenderer permite que você aplique um determinado estilo ou tema a um ToolStrip facilmente.
ToolStripProfessionalRenderer cria canetas e pincéis com base em uma tabela de cores substituível (ProfessionalColorTable).
ToolStripSystemRenderer aplica cores do sistema e um estilo visual plano aos ToolStrip aplicativos.
ToolStripContainer é semelhante ao SplitContainer. Ele usa quatro painéis laterais encaixados (instâncias de ) e um painel central (uma instância de ToolStripPanelToolStripContentPanel) para criar um arranjo típico. Não é possível remover os painéis laterais, mas você pode ocultá-los. Não é possível remover nem ocultar o painel central. Você pode organizar um ou mais ToolStripcontroles , MenuStripou StatusStrip nos painéis laterais e pode usar o painel central para outros controles. O ToolStripContentPanel também fornece uma maneira de obter suporte de renderizador no corpo do seu formulário para uma aparência consistente. ToolStripContainer não oferece suporte a várias interfaces de documentos (MDI).
ToolStripPanel fornece espaço para mover e organizar ToolStrip controles. Você pode usar apenas um painel, se assim desejar, e ToolStripPanel funciona bem em cenários MDI.
Confira também
.NET Desktop feedback