是否可以使下划线热键始终在我的控件上可见,而无需使用 Visual Studio - C# 在 Windows 窗体中按 Alt 键?

我只有在某些时候需要表单的控件始终在字符下加下划线“_”。所以最好只有代码来做这件事。

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

最佳答案

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



所以你可以将消息发送到顶级窗口的句柄。您需要为 UIS_CLEAR 的低位字传递 wParam ,为 UISF_HIDEACCEL 的高位字传递 wParam

这是一些相当粗糙的示例代码。请记住,我的 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);
}

关于c# - 始终显示热键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14054036/

10-13 08:14