[英]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.