2009-05-06 7 views
6

Typiquement, les lettres de raccourcis clavier d'une MenStrip sont soulignées. (& Fichier, & Ouvrir, etc.) Sur un projet, je travaille sur le soulignement apparaît dans le concepteur, mais pas au moment de l'exécution. Je ne peux pas trouver la propriété qui contrôle cela. Quelqu'un sait-il?Winforms MenuStrip Touche de raccourci soulignée

+2

Apparaissent-ils lorsque vous appuyez sur la touche Alt? –

Répondre

9

Sous Windows, il existe un paramètre permettant d'afficher ou non le soulignement. Pour modifier le réglage,

  1. Faites un clic droit sur le bureau
  2. Sélectionnez « Propriétés »
  3. Cliquez sur le « Apparence » onglet
  4. Cliquez sur le « Effets » bouton
  5. Décochez la case " Masquer les lettres soulignées pour la navigation au clavier "
+0

Nice. Je savais que ce cadre était quelque part, mais rappelez-vous comment y arriver. – Crispy

+0

Merci, c'était ça. Sentez-vous un peu bête de poser la question maintenant. :-) – Jeff

+2

Je veux dire, est-ce que cela résout vraiment le problème? Tout utilisateur qui obtient votre application devra soit modifier manuellement ce paramètre ou vous devrez ajouter quelque chose à une application de configuration afin de modifier le paramètre automatiquement. – Mark

7

Ils apparaîtront uniquement au moment de l'exécution lorsque l'utilisateur appuie sur la touche Alt. Lorsque vous appuyez sur la touche Alt, le formulaire pense que vous pouvez utiliser l'un des raccourcis afin qu'il affiche l'un des caractères soulignés.

13

Vous pouvez forcer l'utilisateur à voir le soulignement en créant un outil de rendu ToolStrip personnalisé. Il m'a fallu beaucoup de temps pour trouver comment contourner la réponse de Chris. Voici le rendu que j'ai créé:

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

Et puis dans le formulaire avec le MenuStrip, dans le constructeur vous définissez les renderer:

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

je voudrais noter que si vous préférez un style de système look of renderering vous pouvez étendre la classe ToolStripSystemRenderer au lieu de Professional mais j'aime pouvoir personnaliser la table de couleurs. C'est le correctif qui n'exige pas que le client change ses paramètres d'ordinateur. Prendre plaisir!

+0

Belle solution à la question. –

+0

Merci Cris, vous avez fourni exactement ce que je cherchais. –

+0

Travaillerait quelque chose comme ça, mais appliqué aux boutons de commande (qui peut également avoir une touche de raccourci) ?? – Diego

0

Pour la question de suivi liée à cela, à savoir obtenir que cela fonctionne pour toutes vos applications 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); 
} 

Appel GetAltKeyFixed avant la Application.Run ou équiv.

J'avais besoin de ceci pour la conformité 508 et presque toutes les réponses sur ce sujet sont pour changer les arrangements de bureau Ou un laconique "pourquoi voudriez-vous faire cela?" réponse. Ce n'est pas l'exigence la plus folle que j'ai entendue.

Questions connexes