C# Label顯示多行文本及換行(WinForm/WebForm)

來源:互聯網
上載者:User
以前一直做web開發,基本上是加<br/>或者css控制word-break:break-all;word-wrap:break-word;
Windows中Label控制項是把Label的AutoSize屬性設為False,這樣就可以拖放了。記錄一下。
WinForm
很多朋友都會在開發WinForm中遇到Label要顯示的內容太長,但卻不能換行的問題.這裡我總結了幾種方法,供大家參考:
        第一種是把Label的AutoSize屬性設為False,手動修改Label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用.
        第二種是把Label的Dock設為FILL,同時將AutoSize屬性設為False,這種方法可將上面所說的缺點修正,但是同時Label會將其它 控制項的位置霸佔,影響布局.因此,在使用該方法時,最好給Label加上個Panel或GroupBox控制項.
        第三種是通過判斷內容的長度,動態設定Label的大小.具體程式如下(Label控制項取名為Label1,顯示內容的字串為str):
        int LblNum = str.Length;   //Label內容長度
        int RowNum = 10;           //每行顯示的字數
        float FontWidth = label1.Width / label1.Text.Length;    //每個字元的寬度
        int RowHeight=15;           //每行的高度
        int ColNum = (LblNum - (LblNum / RowNum) * RowNum) == 0 ? (LblNum / RowNum) : (LblNum / RowNum) + 1;   //列數
        label1.AutoSize = false;    //設定AutoSize
        label1.Width = (int)(FontWidth * 10.0);          //設定顯示寬度
        label1.Height = RowHeight * ColNum;           //設定顯示高度
        通過這種方法可以令Label每行所顯示的字數得到控制,同時也動態產生的所對應的行數,這對於排版有很大的好處,但是如果顯示內容過多,該方法也會令 多出來的內容無法顯示.因此,對於顯示內容過長的時候,可以在外層加上Panel或GroupBox,設定AutoScroll為true,這樣就不會因 為太長而導致Label高度擴大而影響其它控制項的布局,同時也可以更好地顯示完整的內容。
WebForm
最在做C#項目中有一個Label在資料庫中獲得資料,然而由於這個欄位是一段很長的text值,在頁面顯示出很長的文字,頁面變形,影響了頁面的美觀
你可以將lable放在一個已經設定固定大小的表格中,然在程式碼html:

<asp:label id="lblPosition" style="word-break:break-all;word-wrap:break-word" runat="server"></asp:Label>

請注意:
  對於沒有數位內容,下面這行完全滿足要求,但加了數字就不行,就不行了。   
  style="word-break:keep-all;word-wrap:normal";   
  有數字或者字母的用下面的:   
  style="word-break:break-all;word-wrap:break-word";  

或Label.Text   =   str.Replace( "\r\n ", " <br/> ");

url: http://greatverve.cnblogs.com/archive/2011/10/20/label-multi.html
關於換行:label1.Text = "你好" + Environment.NewLine + "大氣象";

WinForm

今天碰到一段string在label中能正常換行,但是在textbox中卻無法換行的問題。

首先考慮是分行符號的問題。在網上查了些資料:

1、TextBox 中分行符號為: "\r\n"。

2、Windows 中的分行符號(即:Environment.NewLine) 為 "\r\n"

3、MessageBox.Show() 的分行符號為 "\n"

4、Console 的分行符號為 "\n"

5、分行符號還因平台而已,Unix/Linux 平台分行符號是 "\n"。

6、為保持平台的通用性,最好用 Environment.NewLine。

 

 

由於我用的是vb.net,文法與c#不同,有如下對應關係:

                            C#          VB.NET            VB.NET中的另一種表示方法

             分行符號       \n             vbLf                     Chr(10)

             斷行符號符       \r              vbCr                    Chr(13)

斷行符號符+ 分行符號        \r\n          vbCrLf            Chr(13) + Chr(10)

 

經測試, windows下:

1 如果只有分行符號或只有斷行符號符,label中能顯示換行,而textbox則不行

2 如果同時有分行符號和斷行符號符,label和textbox都能正常換行 

 這個2個結果在C#及VB.NET中都是一樣的

 

附,如果只有分行符號或只有斷行符號符,用Regex做替換的方法:

首先引入命名空間

 Imports System.Text.RegularExpressions

 

 

然後

Dim sNew As String = Regex.Replace(sOld, vbCrLf + "|" + vbCr + "|" + vbLf, vbCrLf)
       很多朋友都會在開發WinForm中遇到Label要顯示的內容太長,但卻不能換行的問題.這裡我總結了幾種方法,供大家參考:
        第一種是把Label的AutoSize屬性設為False,手動修改Label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用.
        第二種是把Label的Dock設為FILL,同時將AutoSize屬性設為False,這種方法可將上面所說的缺點修正,但是同時Label會將其它控制項的位置霸佔,影響布局.因此,在使用該方法時,最好給Label加上個Panel或GroupBox控制項.
        第三種是通過判斷內容的長度,動態設定Label的大小.具體程式如下(Label控制項取名為Label1,顯示內容的字串為str):
        int LblNum = str.Length;   //Label內容長度
        int RowNum = 10;           //每行顯示的字數
        float FontWidth = label1.Width / label1.Text.Length;    //每個字元的寬度
        int RowHeight=15;           //每行的高度
        int ColNum = (LblNum - (LblNum / RowNum) * RowNum) == 0 ? (LblNum / RowNum) : (LblNum / RowNum) + 1;   //列數
        label1.AutoSize = false;    //設定AutoSize
        label1.Width = (int)(FontWidth * 10.0);          //設定顯示寬度
        label1.Height = RowHeight * ColNum;           //設定顯示高度
        通過這種方法可以令Label每行所顯示的字數得到控制,同時也動態產生的所對應的行數,這對於排版有很大的好處,但是如果顯示內容過多,該方法也會令多出來的內容無法顯示.因此,對於顯示內容過長的時候,可以在外層加上Panel或GroupBox,設

WebForm

解決方案:

1.手動換行:在換行的位置加<br/>就行了

2.指定長度換行+ 不破壞單詞:(1)設定label寬度 width=100px
                                             (2)設定label style="WORD-WRAP: break-word"

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.