我想要一个接受 TAB 键的文本框(并将 TAB、ASCII 0x09、\t 相应地放入文本框中),而不是跳转到下一个控件。 TextBox 有一个属性 AcceptsTab,我已将其设置为 true,但这并没有给出所需的结果。事实证明,AcceptsTab 属性只有在 Multiline 也设置为 true 时才起作用。但是我想要一个不接受换行符的单行文本框。
最佳答案
这就是你要做的。创建您自己的继承自 TextBox 的类。在构造函数中,将 multiline 设置为 true,并将 AcceptsTab 设置为 true。然后,重写 WndProc 并使用以下代码:
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)0x102 && m.WParam.ToInt32() == 13)
{
return;
}
base.WndProc(ref m);
}
这将阻止接受输入键,因此不会创建新行。哈基?是的,但它会起作用..
编辑:我将解释这段代码的作用。当发生某些事情时,每个 Windows 窗体和控件都会收到一条 Windows 消息,例如绘画、按下按键等……在这种情况下,我正在寻找 WM_CHAR 消息(即 0x102),该消息告诉 TextBox键被按下。如果这就是消息,并且 WParam == 13,则意味着 Enter 被按下,在这种情况下,返回,不执行任何操作。否则,按预期恢复。有道理吗?
关于c# - 允许用户在文本框中插入 TAB,但不能插入换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/374493/