2016年10月9日 星期日

[C#] String自動斷行

在使用Label遇到就是文字斷行問題,在網路上找到一個解法,寫成一個Method紀錄一下


//透過一個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;
    }





參考資料:


[C#]幫我換行謝謝

沒有留言:

張貼留言