class Label : System.Windows.Forms.Label
{
// 以下3个字段也可以用属性实现
public new string Text = string.Empty; // 文本
public bool LineLimit = false; // 是否仅显示完整的文本行
public bool Wrap = true; // 文本是否自动换行
// 重绘控件
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
int chars, lines;
SizeF size = new SizeF(Width, Height);
StringFormatFlags sff = 0;
if (LineLimit) sff |= StringFormatFlags.LineLimit;
if (!Wrap) sff |= StringFormatFlags.NoWrap;
StringFormat sf = new StringFormat(sff);
e.Graphics.MeasureString(Text, Font, size, sf, out chars, out lines);
base.Text = Text.Substring(0, chars);
base.OnPaint(e);
}
}
}
// 测试
namespace Skyiv.Test
{
using Label = Skyiv.Windows.Forms.Label;
using System.Windows.Forms;
class Test : Form
{
Test()
{
Text = "测试字符串,很长的! 不够长? 那就再来!";
class Label : System.Windows.Forms.Label
{
public new string Text = string.Empty; // 文本
public bool LineLimit = false; // 是否仅显示完整的文本行
public bool Wrap = true; // 文本是否自动换行
private string DisplayText(Graphics g)
{
StringFormat sf = new StringFormat();
if (LineLimit) sf.FormatFlags |= StringFormatFlags.LineLimit;
if (!Wrap) sf.FormatFlags |= StringFormatFlags.NoWrap;
switch (TextAlign)
{
case ContentAlignment.TopLeft :
sf.LineAlignment = StringAlignment.Near ;
sf.Alignment = StringAlignment.Near ;
break;
case ContentAlignment.TopCenter :
sf.LineAlignment = StringAlignment.Near ;
sf.Alignment = StringAlignment.Center;
break;
case ContentAlignment.TopRight :
sf.LineAlignment = StringAlignment.Near ;
sf.Alignment = StringAlignment.Far ;
break;
case ContentAlignment.MiddleLeft :
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Near ;
break;
case ContentAlignment.MiddleCenter :
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
break;
case ContentAlignment.MiddleRight :
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Far ;
break;
case ContentAlignment.BottomLeft :
sf.LineAlignment = StringAlignment.Far ;
sf.Alignment = StringAlignment.Near ;
break;
case ContentAlignment.BottomCenter :
sf.LineAlignment = StringAlignment.Far ;
sf.Alignment = StringAlignment.Center;
break;
case ContentAlignment.BottomRight :
sf.LineAlignment = StringAlignment.Far ;
sf.Alignment = StringAlignment.Far ;
break;
}
int chars, lines;
g.MeasureString(Text, Font, ClientSize, sf, out chars, out lines);
return Text.Substring(0, chars);
}