繁体   English   中英

TextBox可以显示的最大字符数

[英]The maximum number of characters a TextBox can display

刚才我看到一个问题: StringBuilder不会在TextBox(WinForms,C#)中显示 帖子的作者无法在其单行TextBox显示其内容,该内容由大约50k个字符组成。

答案指出,他应该将MultiLine属性更改为true 评论中的解释说:

由于迭代是10000次,因此生成的字符串很大,并且不会显示在单行文本框中。

因此,我对单行文本框可以显示最大长度感到好奇。

我浏览了SO,发现了这个问题: TextBox的最大字符数(不是MaxLength) ,它清除了一些疑问,但不是全部。 我仍然想知道:

  1. 由于Text属性为String类型,因此当MultiLinefalse时,为什么它甚至不能处理50k个字符?
  2. MultiLinefalse时, TextBox可以容纳多少个字符? 我们有办法得到这个号码吗?
  3. 为什么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 ,即textBox1textBox2 textBox2将显示textBox1的实时字符数。 另外,我将两个TextBoxMaxLength属性都更改为0 代码如下:

public Form1()
{
    InitializeComponent();

    textBox1.TextChanged += (s, e) => textBox2.Text = textBox1.Text.Length.ToString();
}

原来,当文本长度超过43679Text完全消失了:

4367943680

因此,分配给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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM