2016-10-18 25 views
0

我有一個循環,每次循環時都會追加一個新行。當它結束時,我複製到剪貼板StringBuilder.ToString(),然後將它粘貼到記事本中,閃爍的光標保留在它下面的一個新行上,而不是在最後一個字符串的末尾。我怎樣才能防止這種情況發生,並且遊標保留在最後一個字符串的末尾,而不是在新行的下面?當複製到剪貼板時,StringBuilder在結尾返回字符串+ NewLine列表?

StringBuilder sbItems = new StringBuilder(); 
for (int i = 0; i < 10; i++) 
{ 
    sbItems.AppendLine("Item #" + i.ToString()); 

} 
Clipboard.SetText(sbItems.ToString()); 
+0

我連你的代碼重現該問題TBH。 – uTeisT

+0

檢查我的答案,並告訴我是否幫助你。 – mybirthname

+0

這與https://msdn.microsoft.com/library/cb3sbadh(v=vs.110).aspx所記錄的一樣*將指定字符串的副本追加到當前StringBuilder對象的末尾,後跟默認行終止符。 * –

回答

0

只是Trim()字符串

返回一個新字符串,其中的 所有的開頭和結尾出現一組從當前String對象指定的字符是 刪除。

Clipboard.SetText(sbItems.ToString().Trim()); 
1

我看到你複製到剪貼板中的字符串用一個新行結束。當然,這個新行被粘貼,因此你的光標在新行上。

不知何故,你必須擺脫這一新的路線。要做到這一點的方法取決於您的具體規格:

如果該字符串複製到剪貼板,完整的字符串複製到剪貼板

如果這是你的規範,那麼大家誰貼您複製的字符串將以字符串末尾的新行結束。如果貼紙是一個你無法控制的程序,你無法做任何事情。

另一個指標可以是:

如果該字符串複製到剪貼板,終止新線所有,但可能被複制到剪貼板

這樣你會得到你想要,貼紙不會看到終止的新行。但請注意,這樣剪貼板上的字符串不是原始字符串。

代碼(當然這個可以優化,只是顯示小步)

StringBuilder sbItems = FillStringBuilder(...); 
// before copying, remove a possible new line character 
// for this we use property System.Environment.NewLine 
var stringToCopyToClipboard = sbItems.ToString(); 
if (stringToCopyToClipboard.EndsWith(Environment.NewLine) 
{ 
    int newLineIndex = stringToCopyToClipboard.LastIndexOf(Environment.NewLine); 
    stringToCopyToClipboard = stringToCopyToClipboard.Substring(0, newLineIndex); 
} 
Clipboard.SetText(stringToCopyToClipboard);