簡體   English   中英

有沒有辦法在不按ALT的情況下強制顯示助記鍵?

[英]Is there a way to force mnemonic key to show out without pressing ALT?

我正在使用WinForms應用程序,並且想使用助記鍵。 似乎由於Windows參數的緣故,您可以選擇僅在按ALT后使用該應用程序時才顯示它們(此選項作為默認值類似)。 由於這個問題,我意識到了這個選項(順便說一句,但不是重復的)。

我更改了此選項,並且助記符下划線在開始時正確顯示。 但我想避免用戶不得不打開此選項或必須按ALT才能看到帶下划線的鍵。

所以我的問題是: 是否在應用程序中強制更改助記鍵的下划線而不更改設置或按ALT?

對於MenuStrip ,您需要創建一個自定義渲染器以始終顯示助記符,而不管是否按Alt鍵。 要做到這一點從派生ToolStripProfessionalRenderer並覆蓋其OnRenderItemText ,消除NoPrefixHidePrefix從標志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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM