//透過一個RichTextBox來做斷行功能, sourcetext為字串,width在螢幕上要顯示的寬度 private string autoLinebreak(string sourcetext, int width) { //宣告一個RichTextBox來用(不會出現在畫面上) RichTextBox rtbWrap = new RichTextBox(); //設定RichTextBox自動換行(不會引響原本的字串,所以後還是要是依據斷行結果,做字串上的處理) rtbWrap.WordWrap = true; //設定RichTextBox寬度(你想要讓文字顯示在畫面上最大的寬度) rtbWrap.Width = width; //指定字串給RichTextBox rtbWrap.Text = sourcetext;
//初始化回傳斷行結果的字串 string resultstr = ""; //初始化變數
int i = 0;
//GetFirstCharIndexFromLine,當i行第一個字元不存在(這行沒東西),會回傳-1,
//否則會傳i行第1個的Index(就像Array中的Index) while (rtbWrap.GetFirstCharIndexFromLine(i) != -1) { int thislineindex = rtbWrap.GetFirstCharIndexFromLine(i); int nextlineindex = rtbWrap.GetFirstCharIndexFromLine(i + 1);
//沒有下一行了,可以在這個地方切斷,並補上斷行。程式執行完這一輪就停了 if (nextlineindex == -1) { resultstr += sourcetext.Substring(thislineindex) + "\n"; }
//找到這一行以及下一行的Index,補上斷行符號
else { resultstr += sourcetext.Substring(thislineindex, nextlineindex - thislineindex) + "\n"; }
//i+1 ,進行迴圈下一輪 i++; } //釋放RichTextBox資源 rtbWrap.Dispose(); //回傳斷行完畢的字串 return resultstr; }
參考資料:
沒有留言:
張貼留言