c# - 允许用户在文本框中插入 TAB,但不能插入换行符

标签 c# .net textbox tabs

我想要一个接受 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/

相关文章:

java - 在java应用程序中仅在文本字段中输入数字

c# - 可以在 Winforms TextBox 上设置背景图像吗?

c# - 获取用户在浏览器中输入的确切网址

c# - 将 C# 代码转换为 F#(if 语句)

c# - 通过动态 : . NET/C# 框架错误访问泛型类型成员时出现 StackOverflowException?

.net - 使用 NetTopologySuite 从点集合创建多边形

c# - 在 .NET 4.0 中使用 task.run 与 task.run 和 continuewith 进行异步/等待

c# - 无法识别的属性 'targetFramework'。请注意,属性名称区分大小写

c# - XAML 嵌套绑定(bind) StringFormat

c# - 在 C# 中创建代理到真实 Winforms 文本框的无窗口、可缩放文本区域