2

我想要一个接受 TAB 键的 TextBox(并相应地将 TAB、ASCII 0x09、\t 放入文本框中),而不是跳转到下一个控件。TextBox 有一个属性 AcceptsTab,我已将其设置为 true,但这并没有给出所需的结果。事实证明,AcceptsTab 属性仅在 Multiline 设置为 true 时才有效。但是我想要一个不接受换行符的单行文本框。

4

2 回答 2

4

这就是你要做的。创建您自己的继承自 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);
        }

这将阻止输入键被接受,因此不会创建新行。哈基?是的,但它会工作..

编辑:我将解释这段代码的作用。当发生某些事情时,每个窗口窗体和控件都会收到一条窗口消息,例如绘画、按键等……在这种情况下,我正在寻找一条 WM_CHAR 消息(即 0x102),它是告诉 TextBox 哪个消息键被按下。如果这是消息,并且 WParam == 13,那么这意味着 Enter 被按下,在这种情况下,返回,什么都不做。否则,按预期恢复。说得通?

于 2008-12-17T15:16:09.963 回答
0

将多行选择为 true 并将行大小设置为 1。您将获得所需的结果。

于 2008-12-17T13:20:50.973 回答