当控件属性Enable设置为false时,控件颜色会发生改变,有时候我们不想改变颜色,那么可以选择重绘该控件。本例子为保留Lable控件的字体颜色,话不多说直接上代码。
class LabelEx : Label
{
protected override void OnPaint(PaintEventArgs e)
{
if (Enabled)
{
base.OnPaint(e);
}
else
{
e.Graphics.Clear(BackColor);
if (AutoSize)
{
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), 1, 0);
}
else
{
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), new Rectangle(1, 0, Width - 4, Height + 1), StringFormat);
}
}
}
public StringFormat StringFormat
{
get
{
StringFormat sf = new StringFormat();
int flag = (int)TextAlign;
if ((flag & 0xF) > 0)
{
sf.LineAlignment = StringAlignment.Near;
}
else if ((flag & 0xF0) > 0)
{
sf.LineAlignment = StringAlignment.Center;
}
else
{
sf.LineAlignment = StringAlignment.Far;
}
if ((flag & 0x111) > 0)
{
sf.Alignment = StringAlignment.Near;
}
else if ((flag & 0x222) > 0)
{
sf.Alignment = StringAlignment.Center;
}
else
{
sf.Alignment = StringAlignment.Far;
}
return sf;
}
}
}