眼看n的“查找”,在记事本对话框下划线表示有意的错误。该对话框实际上并不是记事本的一部分,它建立了into Windows。底层的winapi调用是FindText()。该功能通常是一堆“臭虫”,一个核心问题是,在将UI放入“show underlines”状态后,创建新窗口不能正常工作,该新窗口不处于该状态。据推测,故意的错误是基于这样的假设,即用户有可能使用Alt键来显示对话框。 Yuck如果他按下Ctrl + F。
Windows对话框可能只需用DrawText()函数绘制“Find”字符串并省略DT_NOPREFIX选项即可。你可以用TextRenderer.DrawText()做同样的事,省略TextFormatFlags.HidePrefix选项。
不完全是WinFormsy,你会喜欢Label控件而不是代码。这是可以破解的,你必须有意地发送消息,让用户界面进入你的对话框的“显示下划线”状态。在为OnHandleCreated()方法的重写这样做的:
protected override void OnHandleCreated(EventArgs e) {
const int WM_UPDATEUISTATE = 0x0128;
base.OnHandleCreated(e);
SendMessage(this.label1.Handle, WM_UPDATEUISTATE, new IntPtr(0x30002), IntPtr.Zero);
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
其中“LABEL1”是你要显示下划线的控制。重复其他控件,如果有的话。这是假设通过发送消息的形式工作,这是行不通的是一堆'臭虫。呸。
Fwiw:do 不是通过按照建议的副本更改系统选项来解决此问题。这是非常不合理的。
你已经试过了吗?请添加您的代码... – Fabjan
Form_Load上的SendKeys.Send(“%”)除外。知道我在控件的文本中使用了'&' - 无论如何,他们有没有机会使用背景图片呢? – Ryan