Обычно буквы горячих клавиш в MenuStrip подчеркнуты. (&File, &Open и т. д.) Над проектом, над которым я работаю, подчеркивание отображается в дизайнере, но не во время выполнения. Я не могу найти свойство, которое управляет этим. Кто-нибудь там знает?
Winforms MenuStrip Подчеркнутая буква горячей клавиши
Ответы (4)
В Windows есть настройка, показывать ли подчеркивание. Чтобы изменить настройку,
- Щелкните правой кнопкой мыши на рабочем столе
- Выберите «Свойства»
- Нажмите на вкладку «Внешний вид»
- Нажмите кнопку «Эффекты»
- Снимите флажок «Скрыть подчеркнутые буквы для навигации с помощью клавиатуры».
Вы можете заставить пользователя видеть подчеркивание, создав собственный модуль визуализации ToolStrip. Мне потребовалось довольно много времени, чтобы понять, как обойти ответ Криса. Вот рендерер, который я создал:
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);
}
}
}
И затем в форме с MenuStrip в конструкторе вы устанавливаете средство визуализации:
public YourFormConstructor()
{
InitializeComponents();
menuStripName.Renderer = new CustomMenuStripRenderer();
}
Я хотел бы отметить, что если вы предпочитаете внешний вид рендеринга в системном стиле, вы можете расширить класс ToolStripSystemRenderer вместо класса Professional, но мне нравится возможность настраивать таблицу цветов. Это исправление, которое не требует от клиента изменения настроек своего компьютера. Наслаждаться!
Они будут отображаться только во время выполнения, когда пользователь нажимает клавишу alt. Когда вы нажимаете клавишу alt, форма думает, что вы, возможно, захотите использовать один из ярлыков, поэтому она отображает любое подчеркивание.
Для последующего вопроса, связанного с этим, а именно, заставить это работать для всех горячих клавиш ваших приложений:
[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);
}
Вызовите GetAltKeyFixed перед Application.Run или эквивалентным.
Мне это нужно для соответствия 508, и почти все ответы на эту тему касаются изменения настроек рабочего стола или краткого «зачем вам это делать?» отклик. Это не самое безумное требование, которое я слышал.