C# Label顯示多行文本及換行(WinForm/WebForm)
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
以前一直做web開發(fā),基本上是加<br/>或者css控制word-break:break-all;word-wrap:break-word;
Windows中Label控件是把Label的AutoSize屬性設為False,這樣就可以拖放了。記錄一下。 WinForm 很多朋友都會在開發(fā)WinForm中遇到Label要顯示的內(nèi)容太長,但卻不能換行的問題.這里我總結(jié)了幾種方法,供大家參考: 第一種是把Label的AutoSize屬性設為False,手動修改Label的大小.這樣的好處是會因內(nèi)容的長度而自動換行,但是當內(nèi)容的長度超過所設定的大小時,多出的內(nèi)容就會無法顯示.因此,這種方法適合于基本確定內(nèi)容長度的時候使用. 第二種是把Label的Dock設為FILL,同時將AutoSize屬性設為False,這種方法可將上面所說的缺點修正,但是同時Label會將其它 控件的位置霸占,影響布局.因此,在使用該方法時,最好給Label加上個Panel或GroupBox控件. 第三種是通過判斷內(nèi)容的長度,動態(tài)設置Label的大小.具體程序如下(Label控件取名為Label1,顯示內(nèi)容的字符串為str): int LblNum = str.Length; //Label內(nèi)容長度 int RowNum = 10; //每行顯示的字數(shù) float FontWidth = label1.Width / label1.Text.Length; //每個字符的寬度 int RowHeight=15; //每行的高度 int ColNum = (LblNum - (LblNum / RowNum) * RowNum) == 0 ? (LblNum / RowNum) : (LblNum / RowNum) + 1; //列數(shù) label1.AutoSize = false; //設置AutoSize label1.Width = (int)(FontWidth * 10.0); //設置顯示寬度 label1.Height = RowHeight * ColNum; //設置顯示高度 通過這種方法可以令Label每行所顯示的字數(shù)得到控制,同時也動態(tài)的生成的所對應的行數(shù),這對于排版有很大的好處,但是如果顯示內(nèi)容過多,該方法也會令 多出來的內(nèi)容無法顯示.因此,對于顯示內(nèi)容過長的時候,可以在外層加上Panel或GroupBox,設置AutoScroll為true,這樣就不會因 為太長而導致Label高度擴大而影響其它控件的布局,同時也可以更好地顯示完整的內(nèi)容。 WebForm 最在做C#項目中有一個Label在數(shù)據(jù)庫中獲得數(shù)據(jù),然而由于這個字段是一段很長的text值,在頁面顯示出很長的文字,頁面變形,影響了頁面的美觀 你可以將lable放在一個已經(jīng)設置固定大小的表格中,然在程序代碼html: <asp:label id="lblPosition" style="word-break:break-all;word-wrap:break-word" runat="server"></asp:Label> 請注意: 對于沒有數(shù)字的內(nèi)容,下面這行完全滿足要求,但加了數(shù)字就不行,就不行了。 style="word-break:keep-all;word-wrap:normal"; 有數(shù)字或者字母的用下面的: 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 關(guān)于換行:label1.Text = "你好" + Environment.NewLine + "大氣象"; WinForm 今天碰到一段string在label中能正常換行,但是在textbox中卻無法換行的問題。 首先考慮是換行符的問題。在網(wǎng)上查了些資料: 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#不同,有如下對應關(guān)系: C# VB.NET VB.NET中的另一種表示方法 換行符 \n vbLf Chr(10) 回車符 \r vbCr Chr(13) 回車符+ 換行符 \r\n vbCrLf Chr(13) + Chr(10)
經(jīng)測試, windows下: 1 如果只有換行符或只有回車符,label中能顯示換行,而textbox則不行 2 如果同時有換行符和回車符,label和textbox都能正常換行 這個2個結(jié)果在C#及VB.NET中都是一樣的
附,如果只有換行符或只有回車符,用正則表達式做替換的方法: 首先引入命名空間 Imports System.Text.RegularExpressions
然后 Dim sNew As String = Regex.Replace(sOld, vbCrLf + "|" + vbCr + "|" + vbLf, vbCrLf) 很多朋友都會在開發(fā)WinForm中遇到Label要顯示的內(nèi)容太長,但卻不能換行的問題.這里我總結(jié)了幾種方法,供大家參考: 第一種是把Label的AutoSize屬性設為False,手動修改Label的大小.這樣的好處是會因內(nèi)容的長度而自動換行,但是當內(nèi)容的長度超過所設定的大小時,多出的內(nèi)容就會無法顯示.因此,這種方法適合于基本確定內(nèi)容長度的時候使用. 第二種是把Label的Dock設為FILL,同時將AutoSize屬性設為False,這種方法可將上面所說的缺點修正,但是同時Label會將其它控件的位置霸占,影響布局.因此,在使用該方法時,最好給Label加上個Panel或GroupBox控件. 第三種是通過判斷內(nèi)容的長度,動態(tài)設置Label的大小.具體程序如下(Label控件取名為Label1,顯示內(nèi)容的字符串為str): int LblNum = str.Length; //Label內(nèi)容長度 int RowNum = 10; //每行顯示的字數(shù) float FontWidth = label1.Width / label1.Text.Length; //每個字符的寬度 int RowHeight=15; //每行的高度 int ColNum = (LblNum - (LblNum / RowNum) * RowNum) == 0 ? (LblNum / RowNum) : (LblNum / RowNum) + 1; //列數(shù) label1.AutoSize = false; //設置AutoSize label1.Width = (int)(FontWidth * 10.0); //設置顯示寬度 label1.Height = RowHeight * ColNum; //設置顯示高度 通過這種方法可以令Label每行所顯示的字數(shù)得到控制,同時也動態(tài)的生成的所對應的行數(shù),這對于排版有很大的好處,但是如果顯示內(nèi)容過多,該方法也會令多出來的內(nèi)容無法顯示.因此,對于顯示內(nèi)容過長的時候,可以在外層加上Panel或GroupBox,設 解決方法: 1.手動換行:在換行的位置加<br/>就行了 2.指定長度換行+ 不破壞單詞:(1)設置label寬度 width=100px 該文章在 2017/7/13 23:00:13 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |