【问题标题】:Allow users to insert a TAB into a TextBox but not newlines允许用户在 TextBox 中插入 TAB 但不允许换行
【发布时间】:2008-12-17 13:12:25
【问题描述】:

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

【问题讨论】:

    标签: c# .net textbox tabs


    【解决方案1】:

    这就是你要做的。创建您自己的继承自 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 被按下,在这种情况下,返回,什么都不做。否则,按预期恢复。有意义吗?

    【讨论】:

    • 你能给他添加一些 cmets 来解释发生了什么吗?
    【解决方案2】:

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

    【讨论】:

    • 我将如何“将线条大小设置为 1”?
    猜你喜欢
    • 2015-02-04
    • 2011-07-24
    • 2020-02-07
    • 2015-02-15
    • 2013-03-23
    • 2011-07-10
    • 2020-01-17
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多