Pergunta

Normalmente as letras das teclas de atalho em um MenuStrip estão sublinhados. (& Arquivo, & Open, etc) Em um projeto que estou trabalhando nas mostras sublinhado-se no designer, mas não em tempo de execução. Não consigo encontrar a propriedade que controla isso. Alguém aí sabe?

Foi útil?

Solução

No Windows, há uma configuração ou não para mostrar o sublinhado. Para alterar a configuração,

  1. Botão direito do mouse na área de trabalho
  2. selecione "Propriedades"
  3. Clique na aba "Aparência"
  4. Clique no botão "Efeitos"
  5. Desmarque a caixa "Ocultar letras sublinhadas para navegação do teclado"

Outras dicas

Você pode forçar o usuário a ver o sublinhado criando um representante ToolStrip personalizado. Levei muito tempo para descobrir como contornar a resposta de Chris. Aqui está o renderizador eu criei:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace YourNameSpace
{
    class CustomMenuStripRenderer : ToolStripProfessionalRenderer
    {
        public CustomMenuStripRenderer() : base() { }
        public CustomMenuStripRenderer(ProfessionalColorTable table) : base(table) { }

        protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
        {
            e.TextFormat &= ~TextFormatFlags.HidePrefix;
            base.OnRenderItemText(e);
        }
    }
}

E, em seguida, o formulário com o MenuStrip, no construtor de definir o renderizador:

public YourFormConstructor()
{
    InitializeComponents();
    menuStripName.Renderer = new CustomMenuStripRenderer();
}

Eu gostaria de salientar que, se você preferir um visual estilo Sistema de renderering você pode estender a classe ToolStripSystemRenderer vez do profissional, mas eu gosto de ser capaz de personalizar a tabela de cores. Esta é a correção que não requer o cliente para mudar suas configurações do computador. Divirta-se!

Eles só vai aparecer em tempo de execução quando o usuário pressiona a tecla alt. Quando você pressiona a tecla Alt a forma acha que você pode querer usar um dos atalhos por isso apresentar alguma das sublinhado.

Para o follow-up questão relacionada a esta, ou seja, começar este trabalho para todas as suas aplicações hotkeys:

[DllImport ("user32.dll")] 
static extern void SystemParametersInfo(uint uiAction, uint uiParam, ref
int pvParam, uint fWinIni); 

const uint SPI_SETKEYBOARDCUES = 0x100B; 

private static void GetAltKeyFixed() 
{ 
 //Set pvParam to TRUE to always underline menu access keys, 
 int pv = 1; 
 /* Call to systemparametersinfo to set true of pv variable.*/ 
 SystemParametersInfo(SPI_SETKEYBOARDCUES, 0, ref pv, 0); 
}

Chamada GetAltKeyFixed antes da Application.Run ou equiv.

Eu precisava disso para 508 conformidade e quase todas as respostas sobre este assunto são para alterar as configurações de desktop ou um concisa "por que você iria querer fazer isso?" resposta. Este não é o requisito mais louca que eu já ouvi off.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top