C#在WinForm開發中Label換行方法


在開發WinForm中可能經常遇到Label要顯示的內容太長,但卻不能換行的問題。本文將為大家提供三個解決方法,供大家選擇.

很多朋友都會在開發WinForm中遇到Label要顯示的內容太長,但卻不能換行的問題.這里我總結了幾種方法,供大家參考。

第一種是把Label的AutoSize屬性設為False,手動修改Label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用。

第二種是把Label的Dock設為FILL,同時將AutoSize屬性設為False,這種方法可將上面所說的缺點修正,但是同時Label會將其它控件的位置霸占,影響布局.因此,在使用該方法時,最好給Label加上個Panel或GroupBox控件。


經測試,當Label的Dock設為FILL,外面加了Panel,Panel的AutoScroll被設置為true時,當文字過多需要換行時,Pannel也不會自動出現滾動條,而是和第一種方法效果一樣,多余的內容將無法顯示。要想讓Panel出現滾動條,需要Label不停靠Panel(Dock不為Fill),而將label的高度手動設置為足夠大,才會印發panel調出滾動條。測試的環境是vs2010。

因此我覺得第二種發放沒有實際意義。

 

第三種是通過判斷內容的長度,動態設置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高度擴大而影響其它控件的布局,同時也可以更好地顯示完整的內容。

三種方法都有它的優缺點,沒有說誰優誰劣,只有最適合的,朋友們不妨試試

 

來自: http://hi.baidu.com/haofz1983/blog/item/90b04e22b61da3ffd6cae267.html

 

 

#######################

重新設置label控件的位置要使用labelRA.Location = new Point(X,Y)的形式。

因為由於 Point 類是值類型(在 Visual Basic 中是 Structure,在 Visual C# 中是 struct),它按傳值方式返回,意味着訪問該屬性將返回控件的左上點的副本。因此,調整從該屬性返回的 Point 的 X 或 Y 屬性將不影響控件的 Left、Right、Top 或 Bottom 屬性值。若要調整這些屬性,請分別設置每個屬性值,或用新的 Point 設置 Location 屬性。

 

 ##########################

在大多數情況下,使用richTextBox控件完全可以代替Label控件用於顯示,而且會自動生成滾動軸,不像Label那樣需要配合Panel使用才能滾動,而且richTextBox控件顯示出來的文字行間距比Label要寬,看着更舒服。因此當richTextBox被設置為只讀,並且修改底色的情況下,完全可以使用richTextBox顯示文字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM