【问题标题】:Textbox disabled with a huge string文本框被一个巨大的字符串禁用
【发布时间】:2012-06-04 23:54:38
【问题描述】:

textbox 在输入一个大字符串时遇到问题。

在我的例子中,文本框用于编写电子邮件地址,并且没有字符限制。所以,我做了这个测试:我在记事本中写了 200 个电子邮件地址,然后将文本粘贴到 textbox 上,文本消失了,但是如果我改变控件的焦点,文本又会显示出来。我已经看到了这个link,但它对我没有帮助。我已经尝试将 MaxLength 属性更改为 0 (how the microsoft says to do),但在这里也不起作用。

考虑到一个包含 50 个字符的电子邮件地址,MaxLength 属性不会有问题,因为 200 个电子邮件地址乘以 50 个字符(每封电子邮件),我将有 10000 个字符,默认值 TextBox.MaxLength 是32767.

而且,在你询问代码之前,我只将文本设置为字符串。

myEmailObject.Address = txtEmail.Text;

我应该使用RichText,还是什么?

【问题讨论】:

  • 将这些地址加载到 CSV 并在您的程序上解析不是更有效吗?为什么要在一个文本框中写这么多地址?
  • @ShiinZu 哈哈,我也不知道。还有很多其他方法可以做到这一点,但我的老板想要这种方式。
  • 是的,在一个奇怪的请求背后,99% 的时间里都有一个老板在某个地方要求它......

标签: c# winforms textbox


【解决方案1】:

这是 Windows EDIT 控件(由 TextBox 类包装的本机控件)中的一个已知限制。我知道 Windows 7 SP1 和 Windows 8 中存在限制,早期版本几乎肯定也有。

当您在单行文本框中显示超过 5000 个字符时,您将使用此限制。给予或接受,它基于显示文本的总宽度(以像素为单位)。因此,当您使用较小的字体或 iW 字符多时,您可以容纳更多。 Afaik,当宽度超过 32767 像素时,您将超出限制,这个数字会在 USER32 api 的几个地方弹出,并且可以追溯到 16 位的 Windows 版本

这个限制并不经常受到考验,在一个单行文本框中填充这么多字符是不切实际的。用户没有合理的方法可以在这么小的空间内用这么多的文本做任何有用的事情。看不懂,可靠的编辑肯定是不可能的。

考虑一个更实用和用户友好的用户界面,限制不再是一个问题。使用 Multiline = true 或仅显示使用省略号的占位符字符串。

【讨论】:

  • 谢谢,是的,我在 Windows 7 SP1 中进行测试,但在此版本中不正确。顺便说一句,我同意你的观点,它在这么小的空间里有很多文本,但它是一个测试用例,测试人员必须测试包含 200 个电子邮件地址的文本框。
  • 是的,它失败了,我正在尝试修复这个错误:/
【解决方案2】:

尝试将 Multiline 属性设置为 True 并增加文本框的高度

【讨论】:

  • 好的,成功了。谢谢,但是我的控制力很小,我不能这样做。所以,我只是将TextBox.MaxLength 属性设置为 6000 个字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2012-08-06
  • 2020-08-19
  • 1970-01-01
  • 2018-01-02
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多