我有文本框,应该用于将格式化文本发送到远程应用程序,我应该格式化它,以便在最近的空间中打破到第30个字符(包括空格),并且该行被破坏的空间应该被删除,所以它没有被带到下一行。当然,它应该在文本的末尾执行(中断,再次开始计数,中断等)。 - 其他事情是格式化文本的字符应该从计数中排除。 我有解决方案,在SO上找到,但它适用于一行。
string sTemp = textBox1.Text.Substring(0, 30);
sTemp = sTemp.Replace(" @A ", "");
sTemp = sTemp.Replace("@A ", "");
sTemp = sTemp.Replace(" @A", "");
sTemp = sTemp.Replace("@A", "");
sTemp = sTemp.Replace(" @B ", "");
sTemp = sTemp.Replace("@B ", "");
sTemp = sTemp.Replace(" @B", "");
sTemp = sTemp.Replace("@B", "");
int numberOfLeak = 30 - sTemp.Length;
var x = 30 + numberOfLeak;
if (textBox1.Text.Length > x)
{
textBox1.Text = textBox1.Text.Insert(x, Environment.NewLine);
}
有人可以帮助使这项工作多行,直到文本结束?
提前致谢。
答案 0 :(得分:2)
<input type="text" />
(为asp:textbox
生成的默认标记)应该只有一行文本。
您应该通过将 TextMode 属性设置为 多行 来使用textarea:
<asp:TextBox TextMode="MultiLine" runat="server" ID="mytextarea"></asp:TextBox>
修改强>
我来了这段简单的代码。它将最近的空格替换为range
位置(因此在此点之前或之前):
int range = 10;
string txt = "helloooooo mister how do you do";
for (int i = range; i < txt.Length - 1; i = i + range + 2)
{
int closestPosition = txt.IndexOf(" ", i) > txt.LastIndexOf(" ", i)
? txt.IndexOf(" ", i)
: txt.LastIndexOf(" ", i);
txt = txt.Remove(closestPosition, 1).Insert(closestPosition, Environment.NewLine);
}
它返回以下字符串:
"helloooooo\r\nmister how\r\ndo you do"
答案 1 :(得分:0)
如果该解决方案适用于一行,只需将其放入方法中并在每个行的循环中调用它。 e.g。
// put the lines in an array
string[] result = textBox1.Text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
StringBuilder output = new StringBuilder();
foreach (string line in result)
{
output.AppendLine(WorkingSolutionForOneLine(line));
}
string finalResult = output.ToString();
使用WorkingSolutionForOneLine方法作为您在问题中发布的工作方法:
string WorkingSolutionForOneLine(string line)
{
string sTemp = line.Substring(0, 30);
sTemp = sTemp.Replace(" @A ", "");
sTemp = sTemp.Replace("@A ", "");
sTemp = sTemp.Replace(" @A", "");
sTemp = sTemp.Replace("@A", "");
sTemp = sTemp.Replace(" @B ", "");
sTemp = sTemp.Replace("@B ", "");
sTemp = sTemp.Replace(" @B", "");
sTemp = sTemp.Replace("@B", "");
int numberOfLeak = 30 - sTemp.Length;
var x = 30 + numberOfLeak;
if (line.Length > x)
{
line = line.Insert(x, Environment.NewLine);
}
return line;
}