![](/img/trans.png)
[英]Is there a maximum number of characters that can be written using a StreamWriter?
[英]The maximum number of characters a TextBox can display
刚才我看到一个问题: StringBuilder不会在TextBox(WinForms,C#)中显示 。 帖子的作者无法在其单行TextBox
显示其内容,该内容由大约50k个字符组成。
答案指出,他应该将MultiLine
属性更改为true
。 评论中的解释说:
由于迭代是10000次,因此生成的字符串很大,并且不会显示在单行文本框中。
因此,我对单行文本框可以显示的最大长度感到好奇。
我浏览了SO,发现了这个问题: TextBox的最大字符数(不是MaxLength) ,它清除了一些疑问,但不是全部。 我仍然想知道:
Text
属性为String
类型,因此当MultiLine
为false
时,为什么它甚至不能处理50k个字符? MultiLine
为false
时, TextBox
可以容纳多少个字符? 我们有办法得到这个号码吗? MultiLine
属性会影响此功能? 对于问题2的第一部分,我做了以下验证:
我怀疑此长度与分配给Text
属性的内存有关。 我在网上做了一些研究,这份MSDN文档给了我一些见解:
Windows NT 4.0,Windows 2000,Windows 2000 Professional,Windows 2000 Server,Windows 2000 Advanced Server,Windows XP Home Edition,Windows XP Professional x64 Edition,Windows Server 2003 Platform注意:如果MaxLength属性设置为0,则最大数目为用户可以输入的字符为2147483646或基于可用内存的数量(以较小者为准)。
因此,我做了一个实验:我创建了2个TextBox
,即textBox1
和textBox2
。 textBox2
将显示textBox1
的实时字符数。 另外,我将两个TextBox
的MaxLength
属性都更改为0
。 代码如下:
public Form1()
{
InitializeComponent();
textBox1.TextChanged += (s, e) => textBox2.Text = textBox1.Text.Length.ToString();
}
原来,当文本长度超过43679
, Text
完全消失了:
因此,分配给Text
属性的内存似乎可以容纳我计算机上的43679个字符。 但我不确定所有计算机的此数字是否相同。 我们是否有更复杂的方法来获取此号码?
从我的测试中,我发现在给定TextBox字体的情况下,Textbox无法显示超过32k像素的行。
使用这个小测试台
public Form1()
{
InitializeComponent();
textBox1.Font = new System.Drawing.Font("Consolas", 32f);
G = textBox1.CreateGraphics();
for (int i = 0; i < 100; i++) textBox1.Text += i.ToString("0123456789");
}
Graphics G;
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++) textBox1.Text += i.ToString("x");
Console.WriteLine( textBox1.Text.Length.ToString("#0 ")
+ G.MeasureString(textBox1.Text, textBox1.Font).Width);
}
您会看到,一旦宽度超过32k,显示就会消失。 对于所选的大Fontsize,仅发生约1350个字符。 这应该解释我们从评论imo获得的不同结果。
文本仍保留数据的完整长度。
更新 :根据本文的答案, 此限制与TextBoxes及其行无关,而与Windows控件有关:
汉斯·帕桑特写道:
这是Windows中的体系结构限制。 各种指示窗口位置的消息(例如WM_MOUSEMOVE)以32位整数报告位置,其中X位置为16位,Y位置为16位。 因此,您不能创建大于short.MaxValue的窗口。
因此,在计算其显示时,TextBox达到了极限,并且静默/优美地(??)根本不显示任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.