2016-10-26 4 views
3

Я хочу, чтобы размер шрифта Button изменялся динамически, когда я изменяю размер кнопки. До сих пор я поместил кнопку в нужное место и изменил размер кнопки, когда меняю размер формы. Но когда кнопка становится маленькой для текста в кнопке, буквы просто «выпадают».C# Изменение размера текста кнопки

Как изменить размер текста кнопок в зависимости от размера кнопки?

+0

Это WinForms жаль, что ... – Stujo

ответ

0

Поскольку вы не указали детали в отношении шрифта, размера, а что нет, я сделаю общий фрагмент, чтобы указать вам в правильном направлении. Пожалуйста, измените его параметры в соответствии с вашими потребностями.

Button button = (Button)sender; 
button.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 

Или даже что-то проще

button.Font = new Font("Microsoft Sans Serif", 10); 
+0

А как изменить динамически с размером кнопки? – Stujo

+0

'button.Font = новый шрифт (кнопка.Font.FontFamily, button.Font.Size * 1.1f);'? С или без * 1.1f part? ... –

0

Вы хотите проверить, насколько высота и ширина у вас есть для кнопки первого.

Затем закодировать петлю на 1PT шрифта на что-то вроде 200

в каждом вызове TextRenderer.MeasureText(button.text, button.font); петли проходят один и тот же шрифт, но с размером точки из петли.

Затем убедитесь, что высота и ширина от MeasureText соответствуют ограничениям кнопки, которые вы указали сами. Если он подходит, попробуйте следующий более высокий размер. Если он не подходит, лучший размер шрифта, если предыдущий.

+0

И как мне изменить его динамически с размером кнопки? – Stujo

+0

привязка к событию кнопки для запуска этого кода, как событие 'SizeChanged' – Franck

3

Для того, чтобы текст в кнопке отзывчивым использовать следующий код:

//paint event from button: 
    private void button1_Paint(object sender, PaintEventArgs e) 
    { 
     float fontSize = NewFontSize(e.Graphics, button1.Size, button1.Font, button1.Text); 

     // set font with Font Class and the returned Size from NewFontSize(); 
     Font f = new Font("Arial", fontSize, FontStyle.Bold); 
     button1.Font = f; 
    } 

    // method to calculate the size for the font: 
    public static float NewFontSize(Graphics graphics, Size size, Font font, string str) 
    { 
     SizeF stringSize = graphics.MeasureString(str, font); 
     float wRatio = size.Width/stringSize.Width; 
     float hRatio = size.Height/stringSize.Height; 
     float ratio = Math.Min(hRatio, wRatio); 
     return font.Size * ratio; 
    } 

Пример кода в действии:

Example of code in action

Как вы видите, будет шрифт можно изменять размер внутри кнопки. И текст не будет выброшен из кнопки. Вы также можете использовать это для других контроллеров .

+0

И как мне изменить его динамически с размером кнопки? – Stujo

+0

Я изменил свой пост, и я понял, как это сделать. @Stujo –

0

Для динамического изменения, я бы попробовал что-то вроде этого. Но это только решение динамического изменения. Для проверки ширины текста вам необходимо реализовать еще несколько функций для этого кода.

public class MyButton : Button 
{ 
    public MyButton() 
    { 

    } 

    public override bool AutoSize { 
     get { 
      return false; 
     } 
     set { 
      base.AutoSize = false; 
     } 
    } 

    protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 

     Font = new Font(this.Font.FontFamily,Height-10,this.Font.Style,GraphicsUnit.Pixel); 

    } 
} 
Смежные вопросы