C# - 使文本框的文本抗锯齿/平滑

时间:2017-03-31 10:38:22

标签: c# .net winforms textbox antialiasing

有没有办法改变文本框控件的文本平滑样式?我尝试对标签控件做同样的事情,但它似乎没有用。

public partial class SmoothTextBox : TextBox
{

private TextRenderingHint _TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
public TextRenderingHint TextRendering {
    get { return _TextRenderingHint; }
    set {
        _TextRenderingHint = value;
        Invalidate();
    }
}

public New() : base()
{
    this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    this.SetStyle(ControlStyles.ResizeRedraw, true);
    this.SetStyle(ControlStyles.UserPaint, true);
    this.SetStyle(ControlStyles.DoubleBuffer, true);
    this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    this.DoubleBuffered = true;
    Multiline = true;
}

protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.TextRenderingHint = _TextRenderingHint;
    base.OnPaint(e);
}
}

我非常确定我必须将UseCompatibleTextRendering属性设置为true,就像我使用Label控件一样,但是没有为文本框控件声明此属性。我能做什么?

通过画一个字符串是我能得到的接近,但我不知道如何操纵它看起来更正常和平滑。

    protected override void OnPaint(PaintEventArgs e)
{
    e.Graphics.TextRenderingHint = _TextRenderingHint;
    e.Graphics.DrawString(System.Text, Font, new SolidBrush(ForeColor), new Point(0, 0));
    base.OnPaint(e);
}

结果:http://prntscr.com/eqpgd8

所以我能想到的最好的方法是将这个小文本框放在与普通文本框大小相同的位置,并将前景色设置为背景颜色。但我根本没有真正进入GDI +,我不知道该怎么做,也不知道它是否有效。

0 个答案:

没有答案