c# - 如何在按钮文本后面获得黑色纯色背景

时间:2017-02-10 06:28:43

标签: c# winforms button text

这是我想要的效果:按钮的文字有黑色背景。

enter image description here

这就是我目前正在生成按钮的方式:

 //Button generated to add to the tab page (remmember buttons represent products)
                    Button b = new Button();

                    //Giving button appropiate size so it looks good and is suffient size to be touch screen compatible
                    b.Size = new Size(80, 80);
                    ////Giving it a better font
                    int newSize = 10;
                    //b.Font = new Font("Imperium Hollow", newSize);
                    b.ForeColor = Color.White;

                    //Displaying the Product/Buttons details on the button.
                    b.Text = row["Description"].ToString() + Environment.NewLine + "£" + Convert.ToDecimal(row["Price"]);

我在互联网上这个,但我不知道如何用我的代码实现它 https://msdn.microsoft.com/en-us/library/baw6k39s(v=vs.110).aspx

修改

@Zohar Peled,谢谢它完成了这项工作,结果就是这样:

enter image description here

正如你所看到的那样,当我绘制文本时,文本没有格式化以适应按钮我希望文本适合像这样的按钮(我仍然想要黑色背景,但也需要格式化,因此它适合于按钮)。

enter image description here

我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用OnPaint事件和TextRendered来绘制如下文本:

    private void button1_Paint(object sender, PaintEventArgs e)
    {
        var b = sender as Button;
        TextRenderer.DrawText(e.Graphics, b.Text, b.Font, e.ClipRectangle, Color.White, Color.Black);
    }

更新

使用文本格式标志更改文本的显示方式。此外,不使用e.ClipRectangle,而是使用更小的矩形。 (在我的测试中,2个像素似乎没问题):

private void button1_Paint_1(object sender, PaintEventArgs e)
{
    var b = sender as Button;
    var rect = e.ClipRectangle;
    rect.Inflate(-2, -2);
    var flags = TextFormatFlags.WordBreak;
    switch (b.TextAlign)
    {
        case ContentAlignment.BottomCenter:
            flags |= TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter;
            break;
        case ContentAlignment.BottomLeft:
            flags |= TextFormatFlags.Bottom;
            break;
        case ContentAlignment.MiddleCenter:
            flags |= TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter;
            break;
            // .... add more cases
    }
    TextRenderer.DrawText(e.Graphics, b.Text, b.Font, rect, Color.White, Color.Black, flags);
}