如何在Winforms按钮的第二行文本中更改字体大小和颜色?

5
 this.Controls.Add(button);
 button.Font = new Font("Arial", 8);
 button.Name = "btn" + idDanych;
 button.Width = 100;
 button.Height = 100;
 button.Location = new Point(0, 0);
 button.Text = "…" + Environment.NewLine + Environment.NewLine + "…";
 button.ForeColor = Color.Black;

如何在按钮第二行文本中更改字体大小和颜色?

1
框架Button一次只支持一种字体 - 您需要使用不同的控件(或创建复合控件)并处理该控件的“Click”事件。 - D Stanley
你能告诉我是哪个控件吗? - harbii
搜索 .NET Windows 按钮控件。有一些是免费的,还有一些是需要购买的。我也看到过人们使用只读、禁用的 RichTextBox,并巧妙地进行样式设置以“模拟”一个按钮。 - D Stanley
使用标准的 .Net 按钮控件是可能的;只是不能使用 .Text.Font 属性。 - Idle_Mind
2个回答

4

使用.Text属性是不可能的...

但是你可以创建一个动态位图来代替文本,可以按照你想要的格式进行排版:

Button with Custom String Rendering via an Image

        Button button = new Button();
        button.Name = "btn" + idDanych;
        button.Width = 100;
        button.Height = 100;
        button.Location = new Point(0, 0);

        button.Text = "";
        Bitmap bmp = new Bitmap(button.ClientRectangle.Width, button.ClientRectangle.Height);
        using (Graphics G = Graphics.FromImage(bmp))
        {
            G.Clear(button.BackColor);

            string line1 = "( " + Wieszak + " ) " + Haczyk;
            string line2 = KodEAN;

            StringFormat SF = new StringFormat();
            SF.Alignment = StringAlignment.Center;
            SF.LineAlignment = StringAlignment.Near;
            using (Font arial = new Font("Arial", 12))
            {
                Rectangle RC = button.ClientRectangle;
                RC.Inflate(-5, -5);
                G.DrawString(line1, arial, Brushes.Black, RC, SF);
            }

            using (Font courier = new Font("MS Courier", 24))
            {
                SF.LineAlignment = StringAlignment.Center;
                G.DrawString(line2, courier, Brushes.Red, button1.ClientRectangle, SF);
            }
        }
        button.Image = bmp;
        button.ImageAlign = ContentAlignment.MiddleCenter;

        this.Controls.Add(button);

你需要找到最佳的字体大小、StringFormat布局和/或定位组合,以使其看起来符合要求。还有其他DrawString()重载方法可以以不同的方式呈现文本。
请注意,控件的高亮方式会有所不同。在我的系统上,当鼠标进入时,标准按钮的整个区域都会高亮显示。使用此方法时,只有边框会高亮,因为按钮的整个中间部分是静态图像。

太好了。但是我怎么改变边框和背景? - harbii
这是可能的,但是随着您想要更改的内容越来越多,它变得更加棘手,因为您必须开始做更多的工作,以使其在所有情况下都能正常运行。如果您想完全自定义它,我同意其他人的看法,最好在网上搜索完全可定制的按钮控件... - Idle_Mind
我想只更改背景和边框,你能帮我吗? - harbii

1
你想要的并不适用于标准的System.Windows.Forms.Button(我假设button是该类的实例):字体大小和颜色适用于所有文本;你不能仅更改文本的一部分的这些属性。
(顺便说一句,你按钮中的第二行文本是空行,所以你可能不会注意到不同的字体或颜色。你是指第三行文本吗?)

好的,那么我应该使用什么来实现拥有不同文本颜色的按钮效果呢? - harbii
如果你想使用标准的 Button 类,那就不要考虑它了。否则,你有两个选择:(a) 实现自己的用户控件(相当高级);或者 (b) 寻找第三方控件库来支持你的需求(比自制容易但更昂贵)。两个流行的这类控件库供应商是Telerik和Infragistics...也许可以从那里开始寻找。 - stakx - no longer contributing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接