winform控件中的Label控件設定AutoSize,Size 和MaximumSize屬性可以實作自動換行,但有時我們需要達不到字數時就換行,這樣的話,這種方法就不能實作了。
此處使用Panel控件,繼承出一個AutoSplitLineLabel控件,實作自動換行。
封裝的代碼如下:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace sanda
{
/// <summary>
/// 可以自動換行的label
/// 換行符為 \r\n
/// </summary>
public class AutoSplitLineLabel : Panel
{
public string[] NewLine { get; set; } = new string[] { @"\r\n" };
public string[] _splitedLines { get; set; }
public string TextContent { get; set; }//此控件未分隔的文本
private Brush _brush = null;//字型畫刷
private Color FontColor;//記錄字型顔色
#region constructor
public AutoSplitLineLabel() : base()
{
TextContent = "";
FontColor = ForeColor;
_brush = new SolidBrush(FontColor);
}
#endregion
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (TextContent == "") return;
var g = e.Graphics;
//不同說明顔色已經ForeColor發生改變
//此時重新定義_brush
if (FontColor != ForeColor)
{
FontColor = ForeColor;
_brush.Dispose();
_brush = new SolidBrush(FontColor);
}
if (TextContent.Contains(NewLine[0]))//有分行符
{
_splitedLines = TextContent.Split(NewLine,StringSplitOptions.None);
SizeF TextSize = g.MeasureString(TextContent, Font);
int baseY = (Height - (((int)TextSize.Height) * _splitedLines.Length))/2;
for (int i = 0; i < _splitedLines.Length; i++)
{
TextSize = g.MeasureString(_splitedLines[i], Font);
int x = (Width - (int)TextSize.Width) / 2;
int y = baseY + (int)TextSize.Height * i;
g.DrawString(_splitedLines[i], Font, _brush, x, y);
}
}
else //一共 一行
{
SizeF TextSize = g.MeasureString(TextContent, Font);
int x = (Width - (int)TextSize.Width) / 2;
int y = (Height - (int)TextSize.Height) / 2;
g.DrawString(TextContent, Font, _brush, x, y);
}
}
}
}
寫完代碼後,編譯一下,就可以在工具箱中找到這個控件了,拖到界面上,打開屬性,設定TextContent的值,就行了。_
通過設定分行符,就可以達到換行的目的,
例如:TextContent=“6666”;此時就是一行顯示
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0kkeNVTWq5UMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwMDOwITN1UTM4AzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
通過設定TextContent=“66666\r\n77777\r\n997”; 就可以自動換行
寫在最後:
雖然實作了自動換行,但沒有實作TextAlign等屬性,預設的居中顯示,如果有别的需求,可自行修改。