在 Windows Forms 開發中,Label 控制項預設不支援自動換行,當文字過長時常會被截斷。本文整理三種常見的解決方案,各有優缺點,開發者可依據情境選擇最適合的方式。
將 Label.AutoSize = false,再手動設定 Width 與 Height。此時文字會依控制項寬度自動換行。
將 Label.Dock = DockStyle.Fill 且 AutoSize = false,並置於 Panel 或 GroupBox 內。
根據字串長度、字型大小、每行字數計算所需寬高,再指派給 Label。
int LblNum = str.Length; // 文字總長度
int RowNum = 10; // 每行顯示字數
float FontWidth = label1.Width / label1.Text.Length; // 單字寬度
int RowHeight = 15; // 行高
int ColNum = (LblNum % RowNum == 0) ? (LblNum / RowNum) : (LblNum / RowNum) + 1; // 行數
label1.AutoSize = false;
label1.Width = (int)(FontWidth * 10.0);
label1.Height = RowHeight * ColNum;
Panel 並設 AutoScroll = true 以支援捲動。| 方法 | 適用情境 | 注意事項 |
|---|---|---|
| 固定大小 + AutoSize=false | 文字長度固定、版面固定 | 超出區域會被切掉 |
| Dock=Fill + 容器控制項 | 需要填滿區域、配合捲動 | 會佔用容器所有空間 |
| 動態計算尺寸 | 文字長度不固定、需精確排版 | 需自行處理超長文字捲動 |
沒有絕對最好的方法,只有最適合當前需求的方法。建議先評估文字長度變化範圍與版面限制,再決定採用哪種策略。