2009-05-06 8 views
6

In genere le lettere dei tasti di scelta rapida su MenuStrip sono sottolineate. (& File, & Aperto, ecc.) In un progetto che sto lavorando alla sottolineatura viene visualizzato nella finestra di progettazione, ma non in fase di esecuzione. Non riesco a trovare la proprietà che controlla questo. Qualcuno là fuori lo sa?Winform MenuStrip Tasto rapido sottolineato Lettera

+2

Vengono visualizzati quando si preme il tasto Alt? –

risposta

9

In Windows, c'è un'impostazione se mostrare o meno la sottolineatura. Per modificare l'impostazione,

  1. fare clic destro sul desktop
  2. Selezionare "Proprietà"
  3. Fare clic sulla scheda "Aspetto"
  4. Fare clic sul pulsante "Effetti"
  5. deselezionare la casella " Nascondi lettere sottolineate per la navigazione da tastiera "
+0

Bello. Sapevo che l'ambientazione era da qualche parte, ma ricorda come arrivarci. – Crispy

+0

Grazie, era così. Senti una specie di stupido che fa la domanda ora. :-) – Jeff

+2

Voglio dire che risolve davvero il problema? Qualsiasi utente che riceve la propria applicazione dovrà modificare manualmente tale impostazione o sarà necessario aggiungere qualcosa a un'applicazione di configurazione per modificare automaticamente l'impostazione. – Mark

7

Si visualizzano solo in fase di esecuzione quando l'utente preme il tasto alt. Quando si preme il tasto alt, il modulo pensa che si potrebbe voler utilizzare una delle scorciatoie in modo da visualizzare la sottolineatura.

13

È possibile forzare l'utente a visualizzare la sottolineatura creando un renderer ToolStrip personalizzato. Mi ci è voluto un po 'per capire come bypassare la risposta di Chris. Ecco il programma di rendering che ho creato:

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 poi il modulo con il MenuStrip, nel costruttore è possibile impostare il programma di rendering:

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

Vorrei notare che, se si preferisce uno stile di sistema aspetto del renderering puoi estendere la classe ToolStripSystemRenderer al posto del Professional ma mi piace poter personalizzare la tabella dei colori. Questa è la correzione che non richiede che il client modifichi le sue impostazioni del computer. Godere!

+0

Bella soluzione al problema. –

+0

Grazie Cris, hai fornito esattamente quello che stavo cercando. –

+0

Funzionerebbe qualcosa del genere ma applicato ai pulsanti di comando (che possono anche avere un tasto di scelta rapida) ?? – Diego

0

Per la domanda di follow-up relative a questo, vale a dire, ottenere questo a lavorare per tutte le vostre applicazioni tasti di scelta rapida:

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

chiamata GetAltKeyFixed prima della Application.Run o equiv.

Avevo bisogno di questo per la conformità 508 e quasi tutte le risposte su questo argomento sono di modificare le impostazioni del desktop o una lacerazione "perché vorresti farlo?" risposta. Questo non è il requisito più pazzo che abbia mai sentito.

Problemi correlati