在開發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顯示文字。