[英]Is there a way to force mnemonic key to show out without pressing ALT?
我正在使用WinForms應用程序,並且想使用助記鍵。 似乎由於Windows參數的緣故,您可以選擇僅在按ALT后使用該應用程序時才顯示它們(此選項作為默認值類似)。 由於這個問題,我意識到了這個選項(順便說一句,但不是重復的)。
我更改了此選項,並且助記符下划線在開始時正確顯示。 但我想避免用戶不得不打開此選項或必須按ALT才能看到帶下划線的鍵。
所以我的問題是: 是否在應用程序中強制更改助記鍵的下划線而不更改設置或按ALT?
對於MenuStrip
,您需要創建一個自定義渲染器以始終顯示助記符,而不管是否按Alt鍵。 要做到這一點從派生ToolStripProfessionalRenderer
並覆蓋其OnRenderItemText
,消除NoPrefix
和HidePrefix
從標志e.TextFormat
。 然后為ToolStripManager.Renderer
注冊渲染器。
其他控件來顯示助記符,可以重寫WndProc
形式的方法和處理WM_UPDATEUISTATE
消息並設置WParam
到的組合UISF_HIDEACCEL
作為高階字和UIS_CLEAR
作為低階字。 這樣,所有控件將顯示助記符下划線。
例
只需將以下代碼復制並粘貼到表單中,然后運行您的應用程序。 該表格將顯示所有助記符的下划線,而無需按Alt :
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
const int WM_UPDATEUISTATE = 0x0128;
const int UISF_HIDEACCEL = 0x2;
const int UIS_CLEAR = 0x2;
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
ToolStripManager.Renderer = new MyRenderer();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_UPDATEUISTATE)
m.WParam = (IntPtr)((UISF_HIDEACCEL & 0x0000FFFF) | (UIS_CLEAR << 16));
base.WndProc(ref m);
}
public class MyRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.TextFormat &= ~TextFormatFlags.NoPrefix;
e.TextFormat &= ~TextFormatFlags.HidePrefix;
base.OnRenderItemText(e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.