harbii
harbii

Reputation: 134

How to change font size and color in second line of text on a Winforms button?

 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;

How can I change the font size and color in the button's second line of text?

Upvotes: 5

Views: 4481

Answers (2)

Idle_Mind
Idle_Mind

Reputation: 39152

It's not possible using the .Text property...

...but you can create a dynamic Bitmap to take the place of the Text, allowing you to format it however you want:

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);

You'll have to figure out the best combination of font sizes, StringFormat layouts, and/or positioning to make it look as desired. There are other DrawString() overloads to render the text in different ways.

Note that there will be a difference in how the control highlights, however. On my system, the entire area of the standard button highlights when the mouse enters. With this approach only the border will highlight since the entire middle of the button is a static image.

Upvotes: 4

What you want to do is not possible with the standard System.Windows.Forms.Button class (of which, I assume, button is an instance): The font size and color apply to all of the text; you cannot change these properties for just one part of the text.

(By the way, the second line of text in your button is an empty line, so you would probably not notice a different font or color anyway. Did you mean the third line of text?)

Upvotes: 1

Related Questions