Winforms MenuStrip letra sublinhada Hotkey
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?
Solução
No Windows, há uma configuração ou não para mostrar o sublinhado. Para alterar a configuração,
- Botão direito do mouse na área de trabalho
- selecione "Propriedades"
- Clique na aba "Aparência"
- Clique no botão "Efeitos"
- 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.