我正在使用System.Windows.Forms.TextBox
。根据文档,MaxLength
属性控制进入用户可以键入或粘贴到TextBox中的字符数量(即,可以通过使用例如AppendText
函数或{{以编程方式添加更多字符。 1}}属性)。可以从Text
属性获取当前字符数。
TextLength
?编辑:我已经测试过它可以容纳超过600k个字符,无论Clear()
如何,此时我手动停止了程序并提出了这个问题。
答案 0 :(得分:10)
AppendText
和Text
。请参阅以下代码。Text
属性的支持字段是普通的旧字符串(私有字段System.Windows.Forms.Control::text
)。因此,最大长度是字符串的最大长度,即“2 GB,或大约10亿个字符”(请参阅System.String)。Lines
属性,但请注意,每次调用它时,您的整个text
将在内部解析为行。如果你推动内容长度的限制,这将是一个坏主意。因此,更快的方式(在执行方面,而不是编码)将压缩字符并计算cr / lfs。你当然需要决定你在考虑一条线的结尾。 代码:即使以编程方式设置文本,也会强制MaxLength
属性:
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication5 {
class TextBoxExt : TextBox {
new public void AppendText(string text) {
if (this.Text.Length == this.MaxLength) {
return;
} else if (this.Text.Length + text.Length > this.MaxLength) {
base.AppendText(text.Substring(0, (this.MaxLength - this.Text.Length)));
} else {
base.AppendText(text);
}
}
public override string Text {
get {
return base.Text;
}
set {
if (!string.IsNullOrEmpty(value) && value.Length > this.MaxLength) {
base.Text = value.Substring(0, this.MaxLength);
} else {
base.Text = value;
}
}
}
// Also: Clearing top X lines with high performance
public void ClearTopLines(int count) {
if (count <= 0) {
return;
} else if (!this.Multiline) {
this.Clear();
return;
}
string txt = this.Text;
int cursor = 0, ixOf = 0, brkLength = 0, brkCount = 0;
while (brkCount < count) {
ixOf = txt.IndexOfBreak(cursor, out brkLength);
if (ixOf < 0) {
this.Clear();
return;
}
cursor = ixOf + brkLength;
brkCount++;
}
this.Text = txt.Substring(cursor);
}
}
public static class StringExt {
public static int IndexOfBreak(this string str, out int length) {
return IndexOfBreak(str, 0, out length);
}
public static int IndexOfBreak(this string str, int startIndex, out int length) {
if (string.IsNullOrEmpty(str)) {
length = 0;
return -1;
}
int ub = str.Length - 1;
int intchr;
if (startIndex > ub) {
throw new ArgumentOutOfRangeException();
}
for (int i = startIndex; i <= ub; i++) {
intchr = str[i];
if (intchr == 0x0D) {
if (i < ub && str[i + 1] == 0x0A) {
length = 2;
} else {
length = 1;
}
return i;
} else if (intchr == 0x0A) {
length = 1;
return i;
}
}
length = 0;
return -1;
}
}
}
答案 1 :(得分:2)
System.Windows.Forms.TextBox
的Text属性是一个字符串,理论上它可以是max length of a string
答案 2 :(得分:1)
理论上的限制是一个字符串,约2GB。但实际上,它取决于运行过程中的条件。它等于字符串在任何给定时间可以分配的最大可用连续内存部分的大小。我在应用程序中有一个文本框,错误大约450MB。