眼看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