是否可以在我的控件上始终显示下划线热键,而无需在Windows窗体中使用Visual Studio - C#按Alt键?
我只有一段时间需要表单的控件总是用字符下面的“_”加下划线。所以只需要代码就可以了。
我可以让Windows的设置始终显示快捷键和热键的下划线,但我只需要它发生一段时间。
答案 0 :(得分:9)
假设您正在使用WinForms,您应该能够依赖底层的Win32机制。这就是WM_UPDATEUISTATE
消息。文档说:
应用程序发送WM_UPDATEUISTATE消息以更改指定窗口及其所有子窗口的UI状态。
因此您可以将消息发送到顶级窗口的句柄。您需要为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);
}