C# 始终显示热键

C# 始终显示热键,c#,windows,visual-studio,C#,Windows,Visual Studio,使用Visual Studio-C#可以使下划线热键在控件上始终可见,而不必在Windows窗体中按Alt键 我只有在某个特定的时间需要表单的控件在字符下始终加上“u”下划线。因此,只要有代码就好了 我可以将Windows设置为始终显示快捷键和热键的下划线,但我只需要在特定时间进行设置 假设您使用的是WinForms,您应该能够依赖底层Win32机制。这就是信息。文件说: 应用程序发送WM_UPDATEUISTATE消息以更改指定窗口及其所有子窗口的UI状态 因此,您可以将消息发送到顶级窗口的句

使用Visual Studio-C#可以使下划线热键在控件上始终可见,而不必在Windows窗体中按Alt键

我只有在某个特定的时间需要表单的控件在字符下始终加上“u”下划线。因此,只要有代码就好了


我可以将Windows设置为始终显示快捷键和热键的下划线,但我只需要在特定时间进行设置

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

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

因此,您可以将消息发送到顶级窗口的句柄。对于
wParam
的低阶单词,需要传递
UIS\u CLEAR
;对于
wParam
的高阶单词,需要传递
UISF\u hideacel

下面是一些相当粗糙的示例代码。请记住,我的专业知识非常有限

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);
}
公共部分类表单1:表单
{
私有consuint WM_UPDATEUISTATE=0x0128;
私人建筑WM_Queryistate=0x0129;
私人建筑用户界面清晰=2;
私有const uist UISF_hideacel=0x2;
公共表格1()
{
初始化组件();
}
私有void Form1\u HandleCreated(对象发送方,PaintEventArgs e)
{
ClearHideacel();
}
私有无效ClearHideAcel()
{

uintpttr wParam=(uintpttr)((UISF_hideacel)您只需要对SendMessage进行一次pinvoke调用。您熟悉pinvoke和SendMessage吗。