簡體   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