2009-05-06 20 views
6

Típicamente están subrayadas las letras teclas de acceso rápido en un MenuStrip. (Archivo &, & abierto, etc.) En un proyecto que estoy trabajando en el subrayado aparece en el diseñador, pero no en tiempo de ejecución. No puedo encontrar la propiedad que controla esto. ¿Alguien sabe?Winforms MenuStrip Subrayado Hotkey Carta

+2

Haz que aparecen al pulsar la tecla Alt? –

Respuesta

9

En Windows, hay un ajuste de si debe o no mostrar el subrayado. Para cambiar la configuración,

  1. Haga clic derecho en el escritorio
  2. "Propiedades"
  3. Seleccionar
  4. Haga clic en la pestaña "Apariencia"
  5. Haga clic en el botón "Efectos"
  6. Desactive la casilla " Hide letras subrayadas para navegación mediante el teclado"
+0

Bueno. Sabía que el escenario estaba en algún lugar, pero recuerda cómo llegar a él. – Crispy

+0

Gracias, eso fue todo. Se siente un poco tonto al hacer la pregunta ahora. :-) – Jeff

+2

Quiero decir, ¿realmente resuelve el problema? Cualquier usuario que obtenga su aplicación deberá cambiar manualmente esa configuración o deberá agregar algo a la aplicación de configuración para cambiar la configuración automáticamente. – Mark

7

Sólo se mostrará en tiempo de ejecución cuando el usuario presiona la tecla alt. Cuando presiona la tecla alt, el formulario cree que es posible que desee usar uno de los accesos directos para que se muestre cualquiera de los subrayados.

13

puede obligar al usuario a ver el subrayado mediante la creación de un procesador de ToolStrip personalizado. Me llevó bastante tiempo descubrir cómo eludir la respuesta de Chris. Aquí está el procesador creé:

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); 
     } 
    } 
} 

Y luego, en la forma con la MenuStrip, en el constructor que ha establecido el representador:

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

me gustaría tener en cuenta que si usted prefiere un estilo Sistema En cuanto a renderering, puede ampliar la clase ToolStripSystemRenderer en lugar de Professional, pero me gusta poder personalizar la tabla de colores. Esta es la solución que no requiere que el cliente cambie la configuración de su computadora. ¡Disfrutar!

+0

Buena solución al problema. –

+0

Gracias Cris, me proporcionó exactamente lo que estaba buscando. –

+0

¿Funcionaría algo así, pero se aplicaría a los botones de comando (que también pueden tener una tecla de acceso directo)? – Diego

0

Para la pregunta de seguimiento relacionado con este, es decir, conseguir que esto funcione para todas sus aplicaciones de teclas de acceso rápido:

[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); 
} 

llamada GetAltKeyFixed antes de la Application.Run o equiv.

Necesitaba esto para 508 y casi todas las respuestas sobre este tema son para cambiar la configuración de escritorio o un lacónico "¿Por qué quieres hacer eso?" respuesta. Este no es el requisito más loco que he escuchado.