這個簡單的問題在WinForms的.NET中多次出現。我有一個文本框,並希望將Enter鍵與Tab鍵相同,就像每當我按下Enter鍵時一樣,我想讓lostfocus被引發,下一個要聚焦的控件等等。我注意到許多類似的問題這個,我可以通過捕獲KeyDown來解決問題,並且當檢測到Enter以移動焦點時,但是我所尋找的是最佳實踐,並且如果不是爲了瞭解Textbox控件在內部檢測Tab鍵的位置以及它如何這是事情,所以我可以添加一個「||鍵== Keys.Enter」。這將阻止Keydown被提出,而是將焦點轉移到下一個控件並提出其他適當的消息。.NET解釋在文本框中輸入密鑰爲製表符
我在 .NET TextBox - Handling the Enter Key之前檢查了這個相似的問題,但這不是我真正想要完成的。我真正想做的事情是儘可能早地在文本框控件中將ENTER解釋爲TAB,或者截取並將Enter更改爲Tab,然後讓Textbox執行此操作。
編輯:這是一起什麼我要找的東西線,但我不知道該修改這樣在Windows消息的「安全」 ...
class FancyTextBox : TextBox
{
public bool TreatEnterAsTab { get; set; }
const int WM_KEYDOWN = 0x100;
const int KEY_TAB= 9;
const int KEY_ENTER = 13;
public override bool PreProcessMessage(ref Message msg)
{
if (TreatEnterAsTab && msg.Msg == WM_KEYDOWN && msg.WParam.ToInt32() == KEY_ENTER)
msg.WParam = new IntPtr(KEY_TAB);
return base.PreProcessMessage(ref msg);
}
}
感謝您的清理。我不確定像這樣修改system.windows.forms.message是可以接受的,但它看起來是最乾淨的,除了必須對TextBox進行子類化之外。 – deepee1