2011-11-24 59 views
0

我有一個文本框應該用於將格式化文本發送到遠程應用程序,我應該格式化它,以便在與第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); 
} 

有人可以幫助使這項工作的許多行,直到文本的結尾?

在此先感謝。

回答

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" 
+0

我這樣做。但是我需要特定的換行符。 –

+0

hm。確實..... –

+0

謝謝,這似乎工作完美! 你有沒有想法如何把它與代碼在我的問題,所以它從計數字符串,如「%A」中刪除? –

0

如果該解決方案適用於一行,只需將它放入一個方法中,並在每一行的循環中調用它。例如

// 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; 
}