始终显示快捷键

4

是否有可能在使用 Visual Studio - C# 创建的 Windows 窗体中,使下划线快捷键始终可见,而无需按下 Alt 键?

我只需要在窗体控件始终带有“_”字符下划线的特定时间内使用。因此,最好提供代码来实现此功能。

我可以设置 Windows 始终显示快捷方式和热键的下划线,但我只需要在特定时间发生。

1个回答

9
假设您正在使用WinForms,您应该能够依赖底层的Win32机制。那就是WM_UPDATEUISTATE消息。文档说:

应用程序发送WM_UPDATEUISTATE消息以更改指定窗口及其所有子窗口的UI状态。

因此,您可以将消息发送到顶级窗口的句柄。您需要将wParam的低位字设置为UIS_CLEAR,将高位字设置为UISF_HIDEACCEL

这里是一些相当粗糙的示例代码。请记住,我对C#的专业知识非常有限。

public partial class Form1 : Form
{
    private const uint WM_UPDATEUISTATE = 0x0128;
    private const uint WM_QUERYUISTATE = 0x0129;
    private const uint UIS_CLEAR = 2;
    private const uint UISF_HIDEACCEL = 0x2;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_HandleCreated(object sender, PaintEventArgs e)
    {
        ClearHideAccel();
    }

    private void ClearHideAccel()
    {
        UIntPtr wParam = (UIntPtr)((UISF_HIDEACCEL << 16) | UIS_CLEAR);
        NativeMethods.SendMessage(this.Handle, WM_UPDATEUISTATE, wParam, IntPtr.Zero);
    }
}

internal class NativeMethods
{
    [DllImport("User32", SetLastError = true)]
    public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam);
}

你只需要调用一次SendMessage函数就可以了。你熟悉pinvoke和SendMessage吗? - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接